[英]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.