[英]Oracle- Selecting max value in a column with reference to a where clause
I have a table t1
我有一张桌子
t1
site| count1 | count2
aaa | 1100 | 500
aaa | 1000 | 400
bbb | 1500 | 700
bbb | 1200 | 600
I want to get the row with the highest column value(1100)
corresponding to the site aaa
我想获得与站点
aaa
对应的具有最高列value(1100)
的行
I am looking for a something like 我正在寻找类似的东西
select max(count1),count2 from t1 where site=aaa
You may use the LAST
aggregate function 您可以使用
LAST
聚合函数
SELECT site
,MAX(count1)
,MAX(count2) KEEP (DENSE_RANK LAST ORDER BY count1) as count2
FROM t1
WHERE site = 'aaa'
GROUP BY site
OR row_number()
或
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;
OR FETCH FIRST n ROWS ONLY
( Oracle 12c +) 或
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;
For considering ties, you may alternatively use dense_rank()
or rank()
instead of row_number()
or WITH TIES
option in 12c 为了考虑
dense_rank()
,您可以选择在12c中使用dense_rank()
或rank()
代替row_number()
或WITH TIES
选项
When you want to use multiple site
( not just 'aaa'
), you should add PARTITION BY SITE
inside OVER()
如果要使用多个
site
(而不仅仅是'aaa'
),则应在OVER()
添加PARTITION BY SITE
OR MAX
Analytic function 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.