[英]Condition on another field into a sum
我有2 ticket
和article
,我有这个查询:
SELECT hour(ticket.stats_iso) hour_num,
IF(MINUTE(ticket.stats_iso) < 30, 0, 1) interval_num,
min(ticket.stats_iso) interval_begin,
max(ticket.stats_iso) interval_end,
count(ticket.id) countid,
sum(ticket.montantTTC) sum_subtotal,
(sum(ticket.montantTTC)/count(ticket.id)) as moy
FROM ticket
WHERE ticket.annule = 0
AND ticket.stats_iso
BETWEEN '2012-01-01 00:00:00' AND '2012-01-01 23:59:59'
GROUP BY hour_num, interval_num
ORDER BY hour_num, interval_num
我对数统计ticket
S和的总和montantTTC
。
我想拥有然后加入的article
数:
SELECT hour(ticket.stats_iso) hour_num,
IF(MINUTE(ticket.stats_iso) < 30, 0, 1) interval_num,
min(ticket.stats_iso) interval_begin,
max(ticket.stats_iso) interval_end,
count(DISTINCT ticket.id) countid,
sum(ticket.montantTTC) sum_subtotal,
(sum(ticket.montantTTC)/count(ticket.id)) as moy, count(article.id)
FROM ticket, article
WHERE ticket.annule = 0
AND ticket.stats_iso
BETWEEN '2012-01-01 00:00:00' AND '2012-01-01 23:59:59'
AND ticket.uid = article.uid_ticket
GROUP BY hour_num, interval_num
ORDER BY hour_num, interval_num
它的工作原理是sum(ticket.montantTTC) sum_subtotal
变为false ...(实际上, 由于1 ticket
有许多article
所以与之相加,它会累加许多重复的ticket
。
count(ticket.id) countid
也有问题,但是我可以写count(DISTINCT ticket.id) countid
。
是否存在一种以sum(ticket.montantTTC) sum_subtotal
为条件的方法?
示例(当然不起作用): sum(if ticket.id IS DISTINCT then ticket.montantTTC) sum_subtotal
非常感谢你。
SELECT HOUR(t.stats_iso) hour_num,
ROUND(MINUTE(t.stats_iso)/60) interval_num,
MIN(t.stats_iso) interval_begin,
MAX(t.stats_iso) interval_end,
COUNT(t.id) countid,
SUM(t.montantTTC) sum_subtotal,
SUM(t.montantTTC)/count(t.id) moy,
SUM(COALESCE(a.article_count,0)) article_count
FROM ticket t
LEFT JOIN (
SELECT uid_ticket, COUNT(*) article_count
FROM article
GROUP BY uid_ticket
) a
ON t.uid = a.uid_ticket
WHERE t.annule = 0
AND t.stats_iso BETWEEN '2012-01-01' AND '2012-01-02'
GROUP BY hour_num, interval_num
ORDER BY hour_num, interval_num
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.