繁体   English   中英

将另一个字段的条件求和

[英]Condition on another field into a sum

我有2 ticketarticle ,我有这个查询:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM