Mysql查询批量结果分组

问题描述 投票:0回答:1

我希望通过 MYSQL SELECT 查询实现类似的效果

我希望将 select 的结果分组为 500 行(每批),并有一列名为 group (或任何内容)的列作为组的键(例如 bartch 0 1 2 3)

选择 * 表格,其中 X 我会选择一个带有列索引的临时表,然后如何限制 500 并继续前进?

这背后的原因是我可以再次拨打该号码以再次获得所有相同的行

或者只选择所有内容并让 PHP 或 Python 来完成工作会是一个更好的主意吗?

+----+------------+ |集团|名称 | +------------------ | 1 | 火腿 | 1 | 面包 +------------------ | 2 | 番茄 | 2 | 埃格斯

从表中选择*

sql mysql database select
1个回答
0
投票

思路是先计算属于同一组的数据,然后按组号进行分组。由于我不知道分组后会做什么,所以我将以连接分组的字符串为例。使用 ROW_NUMBER() 生成行号,并通过减去 1 再除以每组的行数,我们计算出组数,在外层应用FLOOR()函数向下取整。因为x/x = 1,如果行号从1开始,向下取整会导致组数比需要的少1(例如: 1到(x-1)将是batch 1,x到(2x-1)将是batch 2...)。因此,我们需要从行号中减去“1”,以达到分组为1的效果到 x.

-- The group number corresponding to each row of data is calculated
with batchMap as (
    select
        floor((row_number() over () -1) / 500) + 1 batch,
        name
    from t
)
-- Group data with the same group number
select
    batch,
    group_concat(name,',')
from batchMap
group by batch
order by batch
© www.soinside.com 2019 - 2024. All rights reserved.