GROUP BY一列找到MAX,但保留另一列的值 - SQL

时间:2015-02-06 07:05:55

标签: sql

 A   |   B   |   num
----------------------
123      1       2
123      10      5

结果:

 A   |   B   |   max_num
-------------------------
123      10      5

我们说表名是tab,目前我有

SELECT T.A, MAX(T.num) AS max_num
FROM tab T
GROUP BY T.A

但是,结果不包含B列。

SELECT T.A, T.B... GROUP BY T.A, T.B 

也不会给出期望的结果,因为根据A,B对找到了最大值。

如何选择仅按A分组的最大数量,但是为所选的最大行保留B的值?

3 个答案:

答案 0 :(得分:2)

1.从表格中选择最大数量

2. IN Clause的正确过滤器

select * from Mytable where
num in(
select TOP 1 MAX(num)
from mytab
group by colA)

对于SQL SERVER

您可以使用ROW_NUMBER ()

对单个Max使用窗口功能
select * from (
select ROW_NUMBER () OVER (ORDER BY num desc) rn,*
from tab
)d where d.rn=1

答案 1 :(得分:1)

这应该做的工作:

Select t1.A, T1.B,T1.num from tab t1 where (T1.A,T1.num) in (
   SELECT T.A, MAX(T.num) AS max_num
   FROM tab T
   GROUP BY T.A)

选择记录,其中num等于max(num)

请参阅SQLFIDDLE

答案 2 :(得分:0)

你的意思是你想要整个行,其中c =每个a的max(c)值?如果这是一个平局,这个将给出两行:

select a, b, c
from t as t1
where c = (select max(c) from t t2
           where t1.a = t2.a)