簡體   English   中英

Oracle-引用where子句在列中選擇最大值

[英]Oracle- Selecting max value in a column with reference to a where clause

我有一張桌子t1

site| count1 | count2
aaa | 1100   | 500 
aaa | 1000   | 400
bbb | 1500   | 700
bbb | 1200   | 600

我想獲得與站點aaa對應的具有最高列value(1100)的行

我正在尋找類似的東西

select max(count1),count2 from t1 where site=aaa

您可以使用LAST聚合函數

SELECT site
    ,MAX(count1)
    ,MAX(count2) KEEP (DENSE_RANK LAST ORDER BY count1) as count2
FROM t1
WHERE site = 'aaa'
GROUP BY site

row_number()

SELECT site
    ,count1
    ,count2
FROM (
    SELECT t1.*
        ,row_number() OVER (
            ORDER BY count1 DESC
            ) as rn
    FROM t1 WHERE site = 'aaa'
    )
WHERE rn = 1;

FETCH FIRST n ROWS ONLY (Oracle 12c +)

SELECT site
    ,count1
    ,count2 FROM t1
    WHERE site = 'aaa'
   ORDER BY count1 DESC FETCH FIRST 1 ROWS ONLY;

為了考慮dense_rank() ,您可以選擇在12c中使用dense_rank()rank()代替row_number()WITH TIES選項

如果要使用多個site (而不僅僅是'aaa' ),則應在OVER()添加PARTITION BY SITE

OR MAX分析功能

SELECT site
    ,count1
    ,count2
FROM (
    SELECT t1.*
        ,MAX(count1) OVER (PARTITION BY SITE) AS max_count1
    FROM t1
    WHERE site = 'aaa'
    )
WHERE count1 = max_count1

SQL小提琴演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM