关于mysql:如何比较SQL查询结果中的行值?

How do I compare row values in SQL Query result?

本问题已经有最佳答案,请猛点这里访问。

我有SQL子查询结果如下

1
2
3
4
5
6
7
8
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中返回相应的值

输出将是

1
2
3
4
A B C
1 4 10
2 5 9
4 9 3

我怎样才能做到这一点。


您可以使用ANSI标准函数row_number()

1
2
3
4
5
6
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不支持此功能。 相反,只需:

1
2
3
select t.*
from t
where t.b = (select max(t2.b) from t t2 where t2.a = t.a);

如果您关心性能,则需要t(a, b)上的索引。