【发布时间】:2017-04-13 02:01:59
【问题描述】:
我有两张表,如下图:
Table Name : scores
+-------+-----------+--------------+-----------+
| UNID | name | score | PRID |
+-------+-----------+--------------+-----------+
| 1 | name_1 | 93 | 1 |
| 2 | name_2 | 71 | 1 |
| 3 | name_3 | 53 | 2 |
| 4 | name_4 | 82 | 2 |
| 5 | name_5 | 31 | 2 |
| 6 | name_6 | 68 | 3 |
+-------+-----------+--------------+-----------+
和
Table Name : user_dir
+-------+-----------+--------------+-----------+
| PRID | fname | city | gender |
+-------+-----------+--------------+-----------+
| 1 | fname1 | XX | m |
| 2 | fname2 | YY | f |
| 3 | fname3 | ZZ | f |
+-------+-----------+--------------+-----------+
对于来自 user_dir 的任何给定 PRID,我如何获取对应于该 score 最高值的整行>PRID?
例如,对于 PRID 为 2 的用户“fname2”,我想提取整行(而不仅仅是 score 的值),如下所示:
+-------+-----------+--------------+-----------+
| UNID | name | score | PRID |
+-------+-----------+--------------+-----------+
| 4 | name_4 | 82 | 2 |
我使用该行的“max”函数进行了尝试,但它却给了我使用该 PRID 找到的第一行,以及正确的(最大)得分值,如下所示:
+-------+-----------+--------------+-----------+
| UNID | name | score | PRID |
+-------+-----------+--------------+-----------+
| 3 | name_3 | 82 | 2 |
编辑:我误解了我的要求,最终结果需要有最高分对应的“名称”值,而不是最高分本身。
所以实际的最终结果是:
+-------+-----------+--------------+-----------+
| PRID | name | fname | score |
+-------+-----------+--------------+-----------+
| 1 | fname1 | name_1 | 93 |
| 2 | fname2 | name_4 | 82 |
| 3 | fname3 | name_6 | 68 |
【问题讨论】:
-
这个问题已经在 Stack Overflow 上被回答了数百次。我选择了最古老、投票率最高的答案之一,并投票决定将其作为重复答案关闭。如果您不喜欢那个,请单击我添加的标签并找到许多其他答案之一。
-
@BillKarwin 您链接到的副本是针对 Oracle 的。它在 MySQL 中不起作用。
标签: mysql sql greatest-n-per-group