SQL从聚合函数获取其他行

The*_*awk 5 mysql sql

我有一个聚合函数,它通过(col A)进行分组.它从一组列中选择最大值(col B),但我还想从同一行(col C)的列中返回另一个值.但如果它将3行分组,则它从列C中选择第一个值而不是具有最大值的列(MAX(col B)).

A    B    C
1     75  jkl
1    100  abc
1    125  dae
2    200  def
3    300  ghi

"SELECT A, MAX(B), C FROM myTable where B > 50 GROUP BY A"

returns (first row) A => 1, B => 125, C => jkl

I want it to return 

A => 1, B => 125, C => dae
Run Code Online (Sandbox Code Playgroud)

Tar*_*ryn 10

您将需要使用一个子查询来获取max(b)每个子查询,A然后将该值连接回您的表,以返回与子查询的值匹配的其余列:

select *
from mytable t1
inner join
(
  select A, max(b) B
  from mytable
  where b >50
  group by a
) t2
  on t1.a = t2.a
  and t1.b = t2.b
where t1.b >50
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo


Joh*_*Woo 5

因为您还没有提到您正在使用的RDBMS,所以请使用几乎适用于所有RDBMS的查询

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  A, MAX(b) max_B
            FROM    tableName
            WHERE   b > 50
            GROUP   BY A
        ) b ON a.A = b.A   AND
            a.B = b.max_B
Run Code Online (Sandbox Code Playgroud)

但是,如果您的RDBMS支持窗口起作用,您可以使用 DENSE_RANK()

SELECT  A, B, C
FROM    
        (
            SELECT  A, B, C,
                    DENSE_RANK() OVER (PARTITION A ORDER BY B DESC) rn
            FROM    tableName
            WHERE   b > 50
            GROUP   BY      
        ) a
WHERE   rn = 1
Run Code Online (Sandbox Code Playgroud)