我需要在这样的表上创建一个select语句:
id rank name city
34 0 adm TO
44 0 sas BA
44 1 wqe BS
92 0 adm TO
92 1 ter BO
92 2 ter BO
92 3 ter RM
我想要选择的是计算排名为>的行数。 0但仅适用于具有多个等级值的ID。对于那些只有一条记录的id,因此rank为0,那么我想选择那条记录。如果我使用:
SELECT id, count(rank) as t
FROM mytable
WHERE rank > 0
GROUP BY id
然后,例如,我省略了id=34
。
我的最佳结果集是:
id t
34 1
44 1
92 3
有关如何完成此任务的任何提示?
答案 0 :(得分:1)
您可以使用以下内容:
SELECT id,
CASE
WHEN cntNonZero = 0 THEN cntZero
ELSE cntNonZero
END AS t
FROM (
SELECT id,
COUNT(CASE WHEN rank > 0 THEN 1 END) AS cntNonZero,
COUNT(CASE WHEN rank = 0 THEN 1 END) AS cntZero
FROM mytable
GROUP BY id ) s