mysql列出sum>0的所有字段

bfnvny8b  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(341)

前一段时间,我有一个问题:如何用多个 count() ,得到了需要的答案。
现在假设我有一张完全一样的table

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服务器版本相对应的手册,以获得使用“groupby”附近的正确语法 username 限位0,25'(第1行)
谢谢你的帮助。

bogh5gae

bogh5gae1#

按用户名聚合并移动 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;

请注意,您当前的 WHERE 如果您真的希望用户完全是a/b或c,那么逻辑实际上与您所写的不一致。

chy5wohz

chy5wohz2#

您可以使用此查询获取 username 符合给定标准的:

select username from users having (count(group_name ='A') > 0 and count(group_name = 'B') > 0) or count(group_name = 'C') > 0;

我们试着 username 来自 users 它们都有条目 group_name s A 以及 B ,或具有
group_name C .
希望这有帮助。

unftdfkk

unftdfkk3#

要列出符合条件的用户名,可以将查询编写为

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

相关问题