MySql 列出总和 > 0 的所有字段
MySql list all fields having sum > 0
前段时间我有一个问题如何编写一个包含多个 count()
、.
的 sql 查询
现在假设我有完全相同的 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
但是我得到语法错误:
You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use
near 'GROUP BY username
LIMIT 0, 25' at line 1
非常感谢任何帮助。
要列出满足您条件的用户名,您可以将查询写为
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
按用户名聚合并将您的 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.
的用户
您可以使用此查询获取符合给定条件的 username
s:
select username from users having (count(group_name ='A') > 0 and count(group_name = 'B') > 0) or count(group_name = 'C') > 0;
我们尝试从 users
中获取 username
s,其中包含 group_name
s A
和 B
的条目,或者 B
的条目 group_name
C
.
希望对您有所帮助。
前段时间我有一个问题如何编写一个包含多个 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
但是我得到语法错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY
username
LIMIT 0, 25' at line 1
非常感谢任何帮助。
要列出满足您条件的用户名,您可以将查询写为
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
按用户名聚合并将您的 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.
您可以使用此查询获取符合给定条件的 username
s:
select username from users having (count(group_name ='A') > 0 and count(group_name = 'B') > 0) or count(group_name = 'C') > 0;
我们尝试从 users
中获取 username
s,其中包含 group_name
s A
和 B
的条目,或者 B
的条目 group_name
C
.
希望对您有所帮助。