在mysql select query中使用IF来更改WHERE子句

时间:2015-07-15 17:10:34

标签: mysql select

我需要在这样的表上创建一个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

有关如何完成此任务的任何提示?

1 个答案:

答案 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

Demo here