前段时间我有一个问题,如何编写带有多个count()
,and got needed answer here的SQL查询。
现在让我们说我有完全相同的表
ID|group_name|username
----------------------
1 | A | user1
----------------------
2 | B | user2
----------------------
3 | C | user1
...
完全相同的查询:
select count(*) from TABLE
where username='user1'
having (sum(group_name ='A') > 0
and sum(group_name = 'B') > 0)
or sum(group_name = 'C') > 0")
但现在我想不计算,但要列出与此having
语句对应的所有用户名。也就是说,列出A和B以及C 组中的所有用户名。
目前我只尝试用count(*)
替换username
并在我的查询中添加group by username
,如下所示:
select username where username='user1' having (sum(group_name ='A') > 0 and sum(group_name = 'B') > 0) or sum(group_name = 'C') > 0") group by username
但我得到语法错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近' GROUP BY
username
LIMIT 0,25'在第1行
非常感谢任何帮助。
答案 0 :(得分:3)
要列出符合条件的用户名,您可以将查询编写为
select username
from table
group by username
having (
sum(group_name ='A') > 0 and sum(group_name = 'B') > 0
) or sum(group_name = 'C') > 0
答案 1 :(得分:2)
按用户名汇总并将WHERE
逻辑移到HAVING
子句中:
SELECT username
FROM yourTable
GROUP BY username
HAVING
SUM(CASE WHEN group_name NOT IN ('A', 'B') THEN 1 ELSE 0 END) = 0 OR
SUM(CASE WHEN group_name NOT IN ('C') THEN 1 ELSE 0 END) = 0;
请注意,如果您真的想要完全属于A / B或C的用户,那么您当前的WHERE
逻辑实际上并不同意您所写的内容。