SQL最大值:每个具有额外条件的组的个数
我被困在一个我认为应该很简单的东西上,我已经在最伟大的N-Per-Group标签和通用的google fu中搜索了一段时间,但找不到合适的东西 我有一个查询(以简化的形式)获取一个数据表并对其执行聚合/分组,但我希望根据不同列的最大值引入一个唯一标识符 举例说明其含义:SQL最大值:每个具有额外条件的组的个数,sql,max,greatest-n-per-group,Sql,Max,Greatest N Per Group,我被困在一个我认为应该很简单的东西上,我已经在最伟大的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 当前查询
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返回一个结果的问题,而不是行为max值的每个人返回一个结果,但只返回uniq
任何帮助都将不胜感激。试试这个
SELECT Person, SUM(TIME) AS Duration, MAX(VALUE) AS `value`, MAX(Uniq) AS Uniq
FROM TABLE
GROUP BY Person
要决定性地实现这一点,您需要连接回您的表:
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;
您正在使用哪些数据库管理系统?博士后?甲骨文?我希望我能在这方面享有声誉-它像一个魅力,接近我已经拥有的东西(我刚刚在子查询中有了Uniq),尽管我花了整整15分钟才了解到为什么将Uniq带到主查询有效@大卫,别担心,我会投你们两个的票+1.