【问题标题】:Conditional counting MySQL [duplicate]条件计数MySQL [重复]
【发布时间】:2018-02-23 09:26:43
【问题描述】:

我必须从一个表中获取每周报告,其中每条记录的状态都像 1 表示打开,2 表示关闭,所以我使用 week 作为键组,并使用 case 条件作为差异计数,如打开、关闭、红色等,但数据并不如我所愿。 您将更好地理解下面提到的查询。 每一个回应都被挪用了。

SELECT DISTINCT discussion_date,department,DAYNAME(discussion_date) AS DAY,CONCAT(YEAR(discussion_date),'/',WEEK(discussion_date)) AS week_name,YEAR(discussion_date) AS YEAR,CONCAT('WEEK -', WEEK(discussion_date)) AS week_no,COUNT(*) as total_queries,(CASE WHEN review_items.status = 1 AND due_date > curdate() THEN count(*) ELSE 0 END) as open,(CASE WHENreview_items.status = 2 THEN count(*) ELSE 0 END) as closed,(case when manager_closuredate > due_date THEN count(*) ELSE 0 END) as red,(CASE WHEN review_items.status = 3 THEN count(*) ELSE 0 END) as hold,(CASE WHEN review_items.status = 4 THEN count(*) ELSE 0 END) as discussion,DATE_ADD(discussion_date,INTERVAL(2 - DAYOFWEEK(discussion_date)) DAY) AS Week_start_date,DATE_ADD(discussion_date,INTERVAL(7 - DAYOFWEEK(discussion_date)) DAY) AS Week_end_date,DAYNAME(DATE_ADD(discussion_date,INTERVAL(2 - DAYOFWEEK(discussion_date)) DAY)) AS WeeK_Start_DAY FROM review_items
WHERE department = 'Development' AND discussion_date BETWEEN '2017-08-01' AND '2017-08-31'
GROUP BY week_name
ORDER BY YEAR (discussion_date) ASC,WEEK(discussion_date) ASC

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    您没有正确使用条件聚合:

    COUNT(CASE WHEN review_items.status = 1 AND due_date > curdate() THEN 1 END) as open,
    COUNT(CASE WHEN review_items.status = 2 THEN 1 END) as closed,
    COUNT(case when manager_closuredate > due_date THEN 1 END) as red,
    COUNT(CASE WHEN review_items.status = 3 THEN 1 END) as hold,
    COUNT(CASE WHEN review_items.status = 4 THEN 1 END) as discussion,
    

    COUNT 可以同时使用值,该列可以是聚合函数,也可以不是聚合函数。

    所以想法是给计数器加 1,只有当条件满足时。有几种方法可以做到这一点,其中一种是 COUNT() ,如果满足条件,则评估为 COUNT(1) ,即 1 。否则,评估为 COUNT(NULL) ,即 0 。

    你也可以使用SUM()

    SUM(CASE WHEN <Condition> THEN 1 ELSE 0 END)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-23
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多