SQL 具有额外条件的每组最大 N

标签 sql max greatest-n-per-group

我被困在一些我认为应该非常简单的事情上,我已经在 Greatest-N-Per-Group 标签和一般 google-fu 中搜索了一段时间,但无法找到非常合适的东西。

我有一个查询(以简化的形式)获取数据表并对其执行聚合/分组,但我想基于不同列的最大值引入唯一标识符。

举例说明含义:

Uniq Value Time Person
1    6     180  Bob
2    8     170  Bob
3    4     45   Claire
4    4     90   Claire

当前查询将是:

SELECT Person, SUM(Time) AS Duration 
FROM Table
GROUP BY Person

我需要添加到这个结果集中的是每个人的最大值的Uniq和值,即结果集如下所示:

Person Duration Value Uniq
Bob    350      8     2
Claire 135      4     3

我最初以为我可以将初始结果集加入到包含 max(value)、person 和 uniq 的子查询中,但随后我遇到了为每个 Uniq 返回一个结果的问题,而不是为每个人返回一个结果,但只返回一个结果uniq,其中行是最大值。

任何帮助将不胜感激。

最佳答案

为了确定性地实现这一点,您需要重新加入您的表:

SELECT  MaxT.Person,
        MaxT.Duration,
        T.Value,
        MIN(T.Uniq) AS Uniq
FROM    T
        INNER JOIN
        (   SELECT Person, SUM(`Time`) AS Duration, MAX(Value) AS Value
            FROM    T
            GROUP BY Person
        ) MaxT
            ON MaxT.Person = t.Person
            AND MaxT.Value = t.Value
GROUP BY MaxT.Person, MaxT.Duration, MaxT.Value;

<强> Example on SQL Fiddle

关于SQL 具有额外条件的每组最大 N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282081/

相关文章:

sql - Delphi ADOQuery 在另一个 ADOQuery 插入后没有拾取记录

MySQL:从连接表中按最大日期选择最近的响应

sql - 获得每个组的最高结果(在 Oracle 中)

mysql - 按月每组最大 'n'

java - java中如何处理sql异常?

mysql - 计算 MySQL select 语句的最大值之和

sql - 测试后 Laravel 重置数据库

python - 从Pandas DataFrame中获取最大值的行索引和列索引

python - 如何从python中的字符串中找到最大值和最小值?

MySQL 使用 max 选择详细信息