get All distinct(按ID)用户列出并仅计算当前活跃的用户

时间:2015-06-04 13:41:18

标签: 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

我得到了All Distinct哪个活跃

ID | Count | Active
2  |  1    | True
3  |  6    | True

如何编写查询以获得我想要的内容?

3 个答案:

答案 0 :(得分:3)

您想要删除where子句。如果active仅采用值TrueFalse(以及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