GROUP BY ID 并选择 MAX

Posted

技术标签:

【中文标题】GROUP BY ID 并选择 MAX【英文标题】:GROUP BY ID and select MAX 【发布时间】:2021-08-02 23:26:33 【问题描述】:

晚上好, 我正在 Oracle 中处理这样的表:

ID BALANCE SEQ
1 102 13
1 119 15
2 50 4
3 20 11
3 15 10
3 45 9
4 90 5
5 67 20
5 12 19
6 20 1

我想为每个 ID 选择具有 MAX(SEQ) 的 BALANCE。

所以最终结果是:

ID BALANCE SEQ
1 119 15
2 50 4
3 20 11
4 90 5
5 67 20
6 20 1

我该怎么做? 我已经尝试了几个 Group by 查询,但没有成功。 感谢您的帮助

【问题讨论】:

除了问题之外,您还应该包括到目前为止您所拥有的代码努力回答您的问题/问题,因为Stack Overflow 不是代码编写服务)。在doing more research 之后,如果您有问题,您可以发布您尝试过的内容,并清楚地解释什么不起作用,并提供一个minimal reproducible example 。我建议阅读How do I ask a Good QuestionWriting the Perfect Question。另外,请务必使用tour。 我无法发布查询,因为我正在处理的表已经是一个长查询的结果,我需要在其中添加我在这里询问的逻辑。 【参考方案1】:

一种方法是使用keep 聚合:

select id,
       max(balance) keep (dense_rank first order by seq desc) as balance,
       max(seq)
from t
group by id;

【讨论】:

【参考方案2】:

您可以使用普通的rank()

SELECT ID, BALANCE, SEQ FROM ( 
select 
ID, BALANCE, SEQ, RANK() OVER (PARTITION BY ID ORDER BY SEQ DESC)  ranks
from t 
) WHERE ranks = 1

示例演示

    SELECT ID, BALANCE, SEQ FROM ( 
SELECT ID, BALANCE, SEQ, RANK() OVER (PARTITION BY ID ORDER BY SEQ DESC)  ranks 
FROM ( 
SELECT 1 ID,    102 BALANCE,    13 SEQ FROM dual UNION all
SELECT 1,       119,    15  FROM dual UNION all
SELECT 2,       50,     4   FROM dual UNION all
SELECT 3,       20,     11  FROM dual UNION all
SELECT 3,       15,     10  FROM dual UNION all
SELECT 3,       45,     9   FROM dual UNION all
SELECT 4,       90,     5   FROM dual UNION all
SELECT 5,       67,     20  FROM dual UNION all
SELECT 5,       12,     19  FROM dual UNION all
SELECT 6,       20,     1   FROM dual 
)
) WHERE ranks = 1

您可以将其添加到您的大查询中,如下所示

SELECT ID, BALANCE, SEQ FROM ( 
select 
ID, BALANCE, SEQ, RANK() OVER (PARTITION BY ID ORDER BY SEQ DESC)  ranks
from (**YOUR BIG QUERY HERE**) 
) WHERE ranks = 1

【讨论】:

以上是关于GROUP BY ID 并选择 MAX的主要内容,如果未能解决你的问题,请参考以下文章

使用 GROUP BY 时如何选择分区内的最佳行

LINQ:从列表中选择项目(Group By/Select/Sum & Max!)

Laravel:如何使用 group By 和 sum 并选择多字段

Django 做一个简单的 group by/count 语句

SQL group by:选择另一列有其最小值/最大值的值

选择描述字段而不将其包含在 GROUP BY 子句中时 GROUP BY id 的最佳方法