拉取具有组中特定列最大值的mysql行[重复]
Posted
技术标签:
【中文标题】拉取具有组中特定列最大值的mysql行[重复]【英文标题】:Pull mysql rows with max value of specific column in group [duplicate] 【发布时间】: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 中不起作用。 另见dev.mysql.com/doc/refman/5.7/en/… 【参考方案1】:SELECT s.*
FROM scores s
WHERE PRID = 2 AND score = (SELECT MAX(score) FROM scores WHERE PRID = 2)
如果您想获取包含每个PRID
的所有最高分数的记录,那么您可以尝试以下操作:
SELECT s.*
FROM scores s
WHERE score = (SELECT MAX(score) FROM scores s1 WHERE s.PRID = s1.PRID)
【讨论】:
以上是关于拉取具有组中特定列最大值的mysql行[重复]的主要内容,如果未能解决你的问题,请参考以下文章
mysql - 为每组分组的 SQL 结果获取具有最大值的记录[重复]
从Oracle SQL中的每个组中选择具有最大值的行[重复]