gpt4 book ai didi

mysql - 在 MySQL 中获取 GROUP 的 MAX 行

转载 作者:太空宇宙 更新时间:2023-11-03 12:13:07 27 4
gpt4 key购买 nike

我有以下数据:

+---------+----------+----------+--------+
| id | someId | number | data |
+---------+----------+----------+--------+
| 27 | 123 | 1 | abcde1 |
| 28 | 123 | 3 | abcde2 |
| 29 | 123 | 1 | abcde3 |
| 30 | 123 | 5 | abcde4 |
| 31 | 124 | 4 | abcde1 |
| 32 | 124 | 8 | abcde2 |
| 33 | 124 | 1 | abcde3 |
| 34 | 124 | 2 | abcde4 |
| 35 | 123 | 16 | abcde1 |
| 245 | 123 | 3 | abcde2 |
| 250 | 125 | 0 | abcde3 |
| 251 | 125 | 1 | abcde4 |
| 252 | 125 | 7 | abcde1 |
| 264 | 125 | 0 | abcde2 |
| 294 | 123 | 0 | abcde3 |
| 295 | 126 | 0 | abcde4 |
| 296 | 126 | 0 | abcde1 |
| 376 | 126 | 0 | abcde2 |
+---------+----------+----------+--------+

我想获得一个 MySQL 查询,为每个 someId 获取具有最高 number 的行的数据。请注意,id 是唯一的,但 number 不是

最佳答案

SELECT someid, highest_number, data
FROM test_1
INNER JOIN (SELECT someid sid, max(number) highest_number
FROM test_1
GROUP BY someid) t
ON (someid=sid and number=highest_number)

不幸的是,它看起来效率不高。在 Oracle 中,可以在没有子查询的情况下使用 OVER 子句,但是 MySQL ......

更新 1

如果有多个最高number的实例,这将为每对someidnumber data强>.要获得每个 someid 的唯一行,我们应该预聚合源表以使 someidnumber 对唯一(参见 t1 子查询)

SELECT someid, highest_number, data
FROM
(SELECT someid, number, MIN(data) data
FROM test_1
GROUP BY
someid, number) t1
INNER JOIN
(SELECT someid sid, max(number) highest_number
FROM test_1
GROUP BY someid) t2
ON (someid=sid and number=highest_number)

更新 2

可以简化之前的解决方案

SELECT someid,highest_nuimber,
(select min(data)
from test_1
where someid=t1.someid and number=highest_nuimber)
FROM
(SELECT someid, max(number) highest_nuimber
FROM test_1
GROUP BY someid) t1

如果我们实现独特的someidnumber 对,那么使用相关子查询是可能的。与 JOIN 不同,如果 number 的最高值重复多次,它不会产生额外的行。

关于mysql - 在 MySQL 中获取 GROUP 的 MAX 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23385748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com