SQL:根据另一列的值在列上保留一个具有最大值的行

Posted

技术标签:

【中文标题】SQL:根据另一列的值在列上保留一个具有最大值的行【英文标题】:SQL : Keep ONE row with max value on a column depending on value of another column 【发布时间】:2021-04-29 18:58:01 【问题描述】:

在 *** 上有详细记录,如何在每个组标识符 (SQL select only rows with max value on a column) 的列中找到具有某个最大值的行的整个数据。

但给定的解决方案将显示具有该最大值的所有行。 如果我们有 3 个 cols "ID, col1, col2" 并且我们想为每个 ID 保留 col1 值最高的行但是如果有多个,只保留 col2 值最低的实例?

谢谢!

【问题讨论】:

在 SO 上也有详细记录:Why should I provide an MCRE for what seems to me to be a very simple SQL query 只需在order by 中添加一个额外的列 【参考方案1】:

一种方法是rank()row_number()

select t.*
from (select t.*,
             row_number() over (partition by id order by col1 desc, col2 asc) as seqnum
      from t
     ) t
where seqnum = 1;

当同一 ID 存在重复的 max col1/min col2 时,如果您想要多行,您可以使用 rank()

【讨论】:

以上是关于SQL:根据另一列的值在列上保留一个具有最大值的行的主要内容,如果未能解决你的问题,请参考以下文章

基于另一列的最大值的列上的 SQL 内连接 [重复]

根据另一列的值在单元格中显示 LISTAGG 值

SQL在列上加入LIKE另一列[重复]

在列上创建自定义组并计算 sql 中的另一列

保留数据框中的行,对于某些列的值的所有组合,在另一列中包含相同的元素

当另一列具有特定值时,列上的 NOT NULL 约束