mysql - 尽管数据库中有多行,但计数仅显示一行
问题描述
这是我的 SQL 查询:
SELECT
COUNT(CASE WHEN `urgency`='1' THEN 1 END) AS verylow,
COUNT(CASE WHEN `urgency`='2' THEN 1 END) AS low,
COUNT(CASE WHEN `urgency`='3' THEN 1 END) AS standard,
COUNT(CASE WHEN `urgency`='4' THEN 1 END) AS high,
COUNT(CASE WHEN `urgency`='5' THEN 1 END) AS critical,
tbl_users.userName
FROM
notes, tbl_users
WHERE
notes.responsible = tbl_users.userID
AND project_id = '4413'
AND (notes.status = 'Ongoing' OR notes.status = 'Not started')
输出是:
verylow low standard high critical userName
5 1 2 1 1 Nick
但是,这是错误的,因为我在数据库中有多个分配了任务的用户。它在我的数据库中看起来像这样:
urgency userName
3 Nick
5 Nick
4 Nick
3 James
1 James
1 Nick
2 Nick
1 James
1 Nick
1 Nick
知道为什么它不计算其他用户的紧迫性以及他有多少不同的紧迫性吗?
解决方案
你所做的并不完全正确。如果您打开 MySQL 模式ONLY_FULL_GROUP_BY,您会收到警告,因为您选择的列不在GROUP BY
子句中,而没有应用聚合函数。所以你需要一个GROUP BY
条款。
整个查询应如下所示:
SELECT
COUNT(CASE WHEN `urgency`='1' THEN 1 END) AS verylow,
COUNT(CASE WHEN `urgency`='2' THEN 1 END) AS low,
COUNT(CASE WHEN `urgency`='3' THEN 1 END) AS standard,
COUNT(CASE WHEN `urgency`='4' THEN 1 END) AS high,
COUNT(CASE WHEN `urgency`='5' THEN 1 END) AS critical,
tbl_users.userName
FROM
notes, tbl_users
WHERE
notes.responsible = tbl_users.userID
AND project_id = '4413'
AND (notes.status = 'Ongoing' OR notes.status = 'Not started')
GROUP BY tbl_users.userName;
推荐阅读
- xml - 由于变音符号,xml 格式不正确。
- graph-theory - 使用 Floyd-Warshall 算法找到负权重的圆
- python - 将每周重采样为每日 CSV 数据帧
- c++ - Visual Studio 2015 中未定义的 MPI
- c# - ASP.Net Web 应用程序连接到主机 SQL 数据库
- c - 使用 C 中的 switch 语句计算字符串中出现的空格、逗号和点
- javascript - Google Firestore:过滤子键在给定值之间的文档
- haskell - 如何在 Haskell 中保持生成的进程处于活动状态?
- php - 如何保护 Laravel 存储文件夹
- mailgun - 多条 MX 记录