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 |
我怎样才能做到这一点。
-
您使用的是哪个DBMS?
-
@P????? 我正在使用MySQL
-
@dsfasdfadf Google:Mysql中每组排名前1位
您可以使用ANSI标准函数row_number():
row_number()函数为每一行分配一个顺序值。 在这种情况下,具有相同值a的所有行都被赋予相同的值,"1"表示最大的b值。 你想要第一个,因此seqnum = 1。
MySQL不支持此功能。 相反,只需:
如果您关心性能,则需要t(a, b)上的索引。
-
你能否为你写的查询添加一些解释。谢谢你的期待
-
@dsfasdfadf。 。 。您是否有理由不接受答案?
-
我想删除这个问题,因为这个问题与这个问题重复:在每个GROUP BY组中选择第一行?正如其他用户已经指出的那样。我的想法是,如果我不接受StackOverflow允许我删除的答案,但它不会,因为我的问题有答案。谢谢你的大力帮助。您的解决方案非常好。
-
我想补充戈登的答案,在MySQL <5.6中,你最好使用LEFT JOIN子句而不是使用带有"select max"的子查询。数据库不缓存常量子查询结果,因此将对WHERE子句将检查的每一行完全评估WHERE子句,这会显着影响查询性能。您可以使用EverSQL SQL查询优化器自动优化查询(免责声明:我是EverSQL的联合创始人,我谦虚地建议使用我们的产品)。
-
@TomerSH。 。 。即使在5.6之前,MySQL也会使用相关子查询的索引。