繁体   English   中英

按 MySQL 中的每 n 行分组

[英]Group by every n rows in MySQL

给定一个 MySql 表,有没有办法使用 Group By 对每 n 行进行分组,就像 Group By 通常那样?

假设我们有如下行:

  • 一个,12
  • 乙,14
  • C, 20
  • 78 岁
  • E,90
  • 女,65

我希望 Group By n = 2 返回

  • 一个,12
  • C, 20
  • E,90

由于每个存储桶包含 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM