这是我的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
有人知道为什么它不计算其他用户的紧迫性,以及他有多少种不同的紧迫性?
答案 0 :(得分:3)
您在做什么并不完全正确。如果打开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;
答案 1 :(得分:0)
使用COUNT
汇总行。由于没有GROUP BY
子句,因此将它们聚合到一行(而不是每个用户说一行)。
您正在选择userName
。哪一个?当您只选择一行时,DBMS会任意选择一行。