gpt4 book ai didi

mysql限制为每个组返回的行数

转载 作者:行者123 更新时间:2023-11-29 12:02:42 25 4
gpt4 key购买 nike

我在表格中得到了这个结果

+------------------------------------------------+
|adm_no | code | value | group_id |
+------------------------------------------------+
|1200 | 101 | 50 | 1 |
+------------------------------------------------+
|1200 | 102 | 60 | 1 |
+------------------------------------------------+
|1200 | 121 | 62 | 1 |
+------------------------------------------------+
|1200 | 233 | 50 | 2 |
+------------------------------------------------+
|1200 | 231 | 98 | 2 |
+------------------------------------------------+
|1200 | 232 | 85 | 2 |
+------------------------------------------------+
|1200 | 511 | 75 | 3 |
+------------------------------------------------+
|1200 | 585 | 38 | 3 |
+------------------------------------------------+
|1200 | 711 | 45 | 4 |
+------------------------------------------------+
|1200 | 785 | 45 | 4 |
+------------------------------------------------+

现在我可以为每个组选择一组有限的行,只要限制的数量相同,但我不知道该怎么做。

所以我想做的是:

1.选择group_id=1的所有行

2.仅选择group_id=2的前两行

3.仅选择 group_id=3 和 group_id=4 的第一行

任何可能的指针(如果可以在单个查询中完成)

最佳答案

您可以使用变量来做到这一点:

SELECT adm_no, code, value, group_id
FROM (
SELECT adm_no, code, value, group_id,
@rn := IF (@gr = group_id,
IF(@gr := group_id, @rn+1, @rn+1),
IF(@gr := group_id, 1, 1)) AS rn
FROM mytable
CROSS JOIN (SELECT @rn:=0, @gr:=0) AS vars
ORDER BY group_id, code ) t
WHERE (group_id = 1)
OR (group_id = 2 AND rn <= 2)
OR (group_id IN (3,4) AND rn = 1)

变量@rn@gr用于实现其他RDBMS中可用的ROW_NUMBER() OVER (PARTITION BY ..)窗口函数例如 SQL SERVER、PostgreSQL 等...

因此,@rn 本质上用于枚举每个 group_id 切片内的记录。在外部查询中使用此变量我们可以轻松获得预期的结果集。

请注意嵌套条件的使用,以便正确使用并然后设置@gr变量。

Demo here

关于mysql限制为每个组返回的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32100310/

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