SQL最大值:每个具有额外条件的组的个数

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 当前查询

我被困在一个我认为应该很简单的东西上,我已经在最伟大的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返回一个结果的问题,而不是行为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.