简体   繁体   English

Oracle-引用where子句在列中选择最大值

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

SQL Fiddle Demo SQL小提琴演示

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

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