具有额外标准的SQL最大N组

时间:2013-11-29 09:17:26

标签: sql max greatest-n-per-group

我坚持认为应该很简单的事情,我一直在寻找Greatest-N-Per-Group标签和一般google-fu,并且找不到合适的东西。< / p>

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

举例说明:

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,其中行是最大值。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

要确定性地实现这一点,您需要加入到您的桌子中:

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

答案 1 :(得分:0)

试试这个

SELECT Person, SUM(TIME) AS Duration, MAX(VALUE) AS `value`, MAX(Uniq) AS Uniq
FROM TABLE
GROUP BY Person