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