通过筛选多行来选择查询

时间:2017-08-17 12:32:02

标签: oracle

我有一张这样的表:

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;

任何导游都会为我做。

2 个答案:

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