gpt4 book ai didi

mysql - 在 MySQL 中查找每个组的最高 n 个值

转载 作者:可可西里 更新时间:2023-11-01 07:48:28 25 4
gpt4 key购买 nike

我有一些数据格式如下:

Lane         Series
1 680
1 685
1 688
2 666
2 425
2 775
...

我想在每条 channel 上获取最高的 n 个系列(为了这个例子,我们假设 2 个,但可能更多)

所以输出应该是:

Lane         Series
1 688
1 685
2 775
2 666

获得每条泳道的最高系列很容易,但我似乎找不到获得最高 2 个结果的方法。

我使用带有 GROUP BY 的 MAX 聚合函数来获取 MAX,但是没有像 SQL Server 中那样的“TOP N”函数,并且使用 ORDER BY...LIMIT 仅返回总体上最高的 N 个结果,而不是每个 channel 。

因为我使用 JAVA 应用程序,所以我自己编写代码来查询数据库并选择 N 是什么,我可以循环并使用 LIMIT 并循环遍历每个 channel ,每次都进行不同的查询,但我想了解如何使用 MySQL 来完成。

最佳答案

有关仅使用 MySQL 但速度非常快的解决方案,请参阅我的其他答案。

此解决方案允许您为每个 channel 指定任意数量的顶行,并且不使用任何 MySQL“时髦”语法 - 它应该在大多数数据库上运行。

select lane, series
from lane_series ls
group by lane, series
having (
select count(*)
from lane_series
where lane = ls.lane
and series > ls.series) < 2 -- Here's where you specify the number of top rows
order by lane, series desc;

测试输出:

create table lane_series (lane int, series int);

insert into lane_series values
(1, 680),
(1, 685),
(1, 688),
(2, 666),
(2, 425),
(2, 775);

select lane, series
from lane_series ls
group by lane, series
having (select count(*) from lane_series where lane = ls.lane and series > ls.series) < 2
order by lane, series desc;

+------+--------+
| lane | series |
+------+--------+
| 1 | 688 |
| 1 | 685 |
| 2 | 775 |
| 2 | 666 |
+------+--------+
4 rows in set (0.00 sec)

关于mysql - 在 MySQL 中查找每个组的最高 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6541963/

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