Sql 获取所有不同(按ID)用户列表,并仅统计活动用户
我需要得到所有不同的用户列表,只统计那些活跃的用户 然后得到类似于Sql 获取所有不同(按ID)用户列表,并仅统计活动用户,sql,sql-server,Sql,Sql Server,我需要得到所有不同的用户列表,只统计那些活跃的用户 然后得到类似于 ID | Count | Active 1 | 0 | False 2 | 1 | True 3 | 6 | True 但当我这么做的时候 SELECT ID,COUNT(*) FROM Users WHERE Active='True' GROUP BY ID 我得到了所有明显的信息 ID | Count | Active 2 | 1 | True 3 | 6 | Tru
ID | Count | Active
1 | 0 | False
2 | 1 | True
3 | 6 | True
但当我这么做的时候
SELECT ID,COUNT(*)
FROM Users
WHERE Active='True'
GROUP BY ID
我得到了所有明显的信息
ID | Count | Active
2 | 1 | True
3 | 6 | True
如何编写查询以获取所需内容?您想删除where子句。如果active仅接受值True、False和NULL,则这将起作用:
SELECT ID, COUNT(*) as cnt, MAX(Active)
FROM Users
GROUP BY ID;
如果Active可以采用其他值,则您可能需要:
SELECT ID, COUNT(*) as cnt,
(CASE WHEN SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) > 0 THEN 'True' ELSE 'False' END) as Active
FROM Users
GROUP BY ID;
您想删除where子句。如果active仅接受值True、False和NULL,则这将起作用:
SELECT ID, COUNT(*) as cnt, MAX(Active)
FROM Users
GROUP BY ID;
如果Active可以采用其他值,则您可能需要:
SELECT ID, COUNT(*) as cnt,
(CASE WHEN SUM(CASE WHEN Active = 'True' THEN 1 ELSE 0 END) > 0 THEN 'True' ELSE 'False' END) as Active
FROM Users
GROUP BY ID;
您需要将条件移动到聚合中:
SELECT ID, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Users
GROUP BY ID
您需要将条件移动到聚合中:
SELECT ID, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Users
GROUP BY ID
输出如下所示:
ID count Active
1 1 False
2 1 True
3 1 True
输出如下所示:
ID count Active
1 1 False
2 1 True
3 1 True
@德米特里霍尔金。这个问题最初被标记为mysql,所以我使用了mysql语法。@DmitrijHolkin。这个问题最初被标记为mysql,所以我使用了mysql语法。