如何比较SQL查询结果中的行值?

时间:2017-07-22 10:50:47

标签: mysql sql subquery greatest-n-per-group

我有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

我怎样才能做到这一点。

1 个答案:

答案 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)上的索引。