MySql列出所有包含>的字段0

时间:2018-05-23 07:17:21

标签: mysql sql laravel-5.2

前段时间我有一个问题,如何编写带有多个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行

非常感谢任何帮助。

2 个答案:

答案 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逻辑实际上并不同意您所写的内容。