[英]Group by every n rows in MySQL
给定一个 MySql 表,有没有办法使用 Group By 对每 n 行进行分组,就像 Group By 通常那样?
假设我们有如下行:
我希望 Group By n = 2 返回
由于每个存储桶包含 2 行,就像普通的 Group By 一样。
像这样分组后,我将运行另一个查询,该查询将返回每个组中所有第二列的总和,因此最终结果行将如下所示:
团体 | 和 |
---|---|
1 | 26 |
2 | 98 |
3 | 155 |
对于第一个查询,您可以使用ROW_NUMBER
和模数:
WITH cte AS (
SELECT *, (ROW_NUMBER() OVER (ORDER BY id) - 1) % 2 rem
FROM yourTable
)
SELECT id, val
FROM cte
WHERE rem = 0;
对于第二个查询,我们可以使用与 integer 除法类似的方法
WITH cte AS (
SELECT *, FLOOR((ROW_NUMBER() OVER (ORDER BY id) - 1) / 2) dvd
FROM yourTable
)
SELECT dvd + 1 AS grp, SUM(val) AS val_sum
FROM cte
GROUP BY dvd;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.