Oracle:替代子查询

时间:2018-04-05 09:18:08

标签: sql oracle

是否有替代方法可以重新编写以下oracle查询而不使用子查询

SELECT COL1,COL2 FROM TABLE WHERE COL2 IN (SELECT MAX(COL2) FROM TABLE)

编辑:只有一个表格有COL1和COL2,其中行的最大值为       COL2是预期的输出

4 个答案:

答案 0 :(得分:6)

SELECT COL1,COL2 
FROM TABLE
ORDER BY COL2 DESC
FETCH FIRST 1 ROW WITH TIES

答案 1 :(得分:2)

这个也应该有效:

SELECT MAX(COL1) KEEP (DENSE_RANK LAST ORDER BY COL2) as COL1,
    MAX(COL2) as COL2 
FROM TABLE;

答案 2 :(得分:1)

使用PARTITION键找出col1的最大col2,如下所示:

select COL1, COL2 from (
select COL1, COL2, ROW_NUMBER() over(PARTITION BY COL1 ORDER BY COL2 desc) row_num  from TABLE 
 )  where row_num=1;

答案 3 :(得分:0)

假设COL1可以用作候选键 -

SELECT T1.COL1,
  T1.COL2
FROM TABLE1 T1
INNER JOIN TABLE1 T2
ON (T1.COL1  = T2.COL1
AND T1.COL2 >= T2.COL2)