我有SQL子查询结果如下
A B C
1 2 12
1 4 10
1 3 11
2 5 9
2 3 8
4 7 8
4 9 3
现在我必须以这种方式为列A中的每个不同值输出值,并且对于列B中的最高值,我必须在列C中返回相应的值
输出
A B C
1 4 10
2 5 9
4 9 3
我怎样才能做到这一点。
答案 0 :(得分:1)
您可以使用ANSI标准函数row_number()
:
select a, b, c
from (select t.*,
row_number() over (partition by a order by b desc) as seqnum
from t
) t
where seqnum = 1;
row_number()
函数为每一行分配一个顺序值。在这种情况下,具有相同值a
的所有行都被赋予相同的值,“1”表示最大b
值。你想要第一个,因此seqnum = 1
。
MySQL不支持此功能。相反,只需:
select t.*
from t
where t.b = (select max(t2.b) from t t2 where t2.a = t.a);
如果您关心效果,则需要t(a, b)
上的索引。