【问题标题】:Stuck to select maximum row坚持选择最大行
【发布时间】:2021-02-23 10:28:18
【问题描述】:

我有一个带有列的表格:

ID | FULLNAME | VALUE
01   Joseph     10
02   Sam        50
...  ...       ... 

我需要选择具有最大值的行,并显示类似的信息

FULLNAME | VALUE 

我尝试使用组函数MAX(),但我无法选择全名,因为如果我将其用作GROUP BY 表达式,它将选择组中的最大值。

其他方式,就是使用WITH语句,按值desc排序表,使用

rank() OVER (PARTITION BY ID) AS max_id 

函数和最大值将在max_id = 1,然后使用

WHERE max_id = 1 

删除其他行。

但我认为有一种方法可以做得更好,但我找不到。

更新:

这个问题的一个棘手的解决方案是

SELECT *
FROM t t1
    LEFT JOIN t t2 ON t1.value<t2.value
WHERE t2.value IS NULL

【问题讨论】:

    标签: sql group-by max


    【解决方案1】:

    最简单的方法是对数据进行排序,拉一行:

    select t.*
    from t
    order by value desc
    fetch first 1 row only;
    

    如果您想打成平手,可以将with ties 添加到fetch first

    另一种方法是:

    select t.*
    from t
    where t.value = (select max(t2.value) from t t2);
    

    使用value 上的索引可以有非常好的性能。

    【讨论】:

    • 谢谢,我找到了一种更巧妙的方法,使用 joins select * from t t1 left join t t2 on t1.value
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 2013-03-11
    • 2012-07-27
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多