如何将表拆分为块并选择每个块的AVG

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

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 mysql-5.7
1个回答
2
投票

您可以使用以下解决方案使用模拟行号(自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;

demo on dbfiddle.uk

© www.soinside.com 2019 - 2024. All rights reserved.