简体   繁体   English

Oracle:子查询的替代方法

[英]Oracle: Alternative to sub-query

Is there an alternative to re-write the below oracle query without using sub-queries 是否有替代方法可以在不使用子查询的情况下重新编写以下oracle 查询

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

Edit : There is only 1 table with COL1 and COL2 where the row with maximum value of COL2 is the expected output 编辑 :只有1个表具有COL1和COL2,其中具有COL2最大值的行是预期输出

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

This one should also work: 这个也应该起作用:

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

Use PARTITION key find out maximum col2 with col1 as per below: 使用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;

Assuming COL1 can be used as candidate key - 假设可以将COL1用作候选键-

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM