php - 条件计数 MySQL

标签 php mysql sql

<分区>

我必须从一个表中获取每周报告,其中每条记录都有它们的状态,例如 1 表示打开,2 表示关闭,所以我将周作为一个按键分组,并使用案例条件来计算差异计数,例如打开、关闭、红色等等,但数据并不像我想要的那样准确。 您将更好地理解下面提到的查询。 每一个回应都是适当的。

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

最佳答案

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

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)

关于php - 条件计数 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46218352/

相关文章:

php - 交响乐。如何将参数传递给自定义表单字段类型?

mysql - 添加一对值作为 SQL 查询中的参数

sql - 使用另一个表的记录作为元素列出 SQL 中的数据结构

MYSql多次替换查询

mysql - SQL查询获取不同行的不同列之间的差异

php - 销毁大部分 session

sql - 有人可以在这个简单的查询中找到语法错​​误吗?

php - 如何使用 YEAR 函数从数据库读取数组

javascript - move_uploaded_file - 图像的文件名?

php - PDO INSERT 查询 500 服务器错误