从表上的不同条件中选择COUNT个

从表上的不同条件中选择COUNT个,第1张

从表上的不同条件中选择COUNT个

这是典型的解决方案。使用case语句来分解不同的条件。如果一条记录满足,则得到1,否则得到0。然后

SUM
对值执行a

  SELECt    SUM(active_count) active_count,    SUM(overdue_count) overdue_count    SUM(due_today_count) due_today_count  FROM   (  SELECt     CASE WHEN jobs.status_id NOT IN (8,3,11) THEN 1 ELSE 0 END active_count,    CASE WHEN jobs.due_date < '2011-06-14' AND jobs.status_id NOT IN(8,11,5,3)  THEN 1 ELSE 0 END  overdue_count,    CASE WHEN jobs.due_date BETWEEN '2011-06-14' AND '2011-06-15 06:00:00.000000' THEN 1 ELSE 0 END  due_today_count    FROM "jobs"    WHERe      jobs.creator_id = 5 ) t

UPDATE如前所述,当0记录作为t返回时,此结果将作为所有值中Null的单个结果。您有三个选择

1)添加一个Haveing子句,以便您没有返回记录,而不是所有NULLS的结果

   HAVINg SUM(active_count) is not null

2)如果您希望返回所有零,则可以对所有总和加总

例如

 SELECT      COALESCE(SUM(active_count)) active_count,       COALESCE(SUM(overdue_count)) overdue_count      COALESCE(SUM(due_today_count)) due_today_count

3)利用

COUNT(NULL) = 0
sbarro所展示的事实。您应该注意,非空值可以是任何数字,而不必为1

例如

 SELECT      COUNT(CASE WHEN  jobs.status_id NOT IN (8,3,11) THEN 'Manticores Rock' ELSE NULL       END) as [active_count]


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5559499.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存