我需要获取所有不同用户列表,并且只计算那些活跃的用户 得到像
这样的东西ID | Count | Active
1 | 0 | False
2 | 1 | True
3 | 6 | True
但是当我做的时候
SELECT ID,COUNT(*)
FROM Users
WHERE Active='True'
GROUP BY ID
我得到了All Distinct哪个活跃
ID | Count | Active
2 | 1 | True
3 | 6 | True
如何编写查询以获得我想要的内容?
答案 0 :(得分:3)
您想要删除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;
答案 1 :(得分:1)
您需要将条件移动到聚合中:
SELECT ID, SUM(CASE WHEN Active='True' THEN 1 ELSE 0 END)
FROM Users
GROUP BY ID
答案 2 :(得分:1)
SELECT ID, COUNT(*) as count,
(CASE WHEN count > 0 THEN 'True' ELSE 'False' END) as Active
FROM test
GROUP BY ID,count
输出结果如下:
ID count Active
1 1 False
2 1 True
3 1 True