我被困在一些我认为应该非常简单的事情上,我已经在 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;
关于SQL 具有额外条件的每组最大 N,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20282081/