我希望通过 MYSQL SELECT 查询实现类似的效果
我希望将 select 的结果分组为 500 行(每批),并有一列名为 group (或任何内容)的列作为组的键(例如 bartch 0 1 2 3)
选择 * 表格,其中 X 我会选择一个带有列索引的临时表,然后如何限制 500 并继续前进?
这背后的原因是我可以再次拨打该号码以再次获得所有相同的行
或者只选择所有内容并让 PHP 或 Python 来完成工作会是一个更好的主意吗?
+----+------------+ |集团|名称 | +------------------ | 1 | 火腿 | 1 | 面包 +------------------ | 2 | 番茄 | 2 | 埃格斯
从表中选择*
思路是先计算属于同一组的数据,然后按组号进行分组。由于我不知道分组后会做什么,所以我将以连接分组的字符串为例。使用 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