我坚持认为应该很简单的事情,我一直在寻找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,其中行是最大值。
非常感谢任何帮助。
答案 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