我有一张这样的表:
col | status
----+-------
1 | 0
1 | 1
2 | 1
2 | 2
3 | 1
3 | 0
我想只选择具有最大状态值的行。但是如果状态中有任何0,也要忽略。因此,预期的行将如下所示(我忽略了1和3,因为status = 0)。
col | status
----+-------
2 | 2
我只能根据max()选择行。但是当我添加另一个子句来过滤零时,它不起作用。
SELECT col, max(status)
FROM my_table
WHERE
(select count(*)
from my_table t1
where t1.col = col
and status = 0) = 0
GROUP BY col;
任何导游都会为我做。
答案 0 :(得分:2)
使用HAVING
子句:
SELECT col, MAX(STATUS)
FROM tab
GROUP BY col
HAVING SUM(CASE WHEN STATUS = 0 THEN 1 ELSE 0 END) = 0;
<强> DBFiddle 强>
如果STATUS
的最小值为0
,那么您可以使用:
SELECT col, MAX(STATUS)
FROM tab
GROUP BY col
HAVING MIN(STATUS) > 0;
答案 1 :(得分:0)
我是SQL的新手,但我确信rank()能达到目的。
select tabl.col, tabl.status from
(select col, status, rank over(status desc) as rnk
from tab where status = 0) tabl
where tabl.rnk = 1
and rownum = 1;