MySQL 5.7
我有一个没有主键的表(用于统计):
|value| date|
|-----+----------|
| 1|13-03-2019|
| 2|12-03-2019|
| 3|16-03-2019|
| 4|16-03-2019|
| 5|16-03-2019|
| 6|16-03-2019|
如何将表拆分为N个块,并选择每个块的avg(value)
?
预期结果,如果上面的示例中的表与块大小= 3一起使用:
|avg_val|
| 2|
| 5|
您可以使用以下解决方案使用模拟行号(自MySQL 8.0以来支持ROW_NUMBER
,因此您无法使用它):
SELECT AVG(value)
FROM (
SELECT value, CEIL((@row_number:=@row_number + 1) / 3) AS group_num
FROM table_name, (SELECT @row_number:=0) rownumber
) t1
GROUP BY t1.group_num;
您可以使用以下解决方案,因为MySQL 8.0(如果您稍后升级并且为了完整性),使用ROW_NUMBER
:
SELECT AVG(value)
FROM (
SELECT value, CEIL(ROW_NUMBER() OVER () / 3) AS group_num
FROM table_name
) t1
GROUP BY t1.group_num;