Mysql 如何将表拆分为块并选择每个块的平均值
MySQL 5.7 我有一个没有主键的表(用于统计): 如何将表拆分为N块,并选择每个块的Mysql 如何将表拆分为块并选择每个块的平均值,mysql,mysql-5.7,Mysql,Mysql 5.7,MySQL 5.7 我有一个没有主键的表(用于统计): 如何将表拆分为N块,并选择每个块的avg(value) 如果上面示例中的表与chunk size=3一起使用,则得到预期结果: |avg_val| | 2| | 5| 您可以使用模拟行号使用以下解决方案(MySQL 8.0支持此解决方案,因此您不能使用此解决方案): 自MySQL 8.0以来,您可以使用以下解决方案(以备以后升级和完整性考虑),使用: 谢谢!我可以再问你一个问题吗?我想把过去一小时内的所有记录分块到总共
avg(value)
如果上面示例中的表与chunk size=3一起使用,则得到预期结果:
|avg_val|
| 2|
| 5|
您可以使用模拟行号使用以下解决方案(MySQL 8.0支持此解决方案,因此您不能使用此解决方案):
自MySQL 8.0以来,您可以使用以下解决方案(以备以后升级和完整性考虑),使用:
谢谢!我可以再问你一个问题吗?我想把过去一小时内的所有记录分块到总共60条记录。在你的答案中,我使用了3,我使用了
select()/60
-这是最优的吗?小时(时间)存储在哪里?你想得到每小时的平均值还是只得到最后一小时的平均值我添加了一个最大值,以便您可以定义最小块大小(这里是10)。得到三行的原因是计算3/60=0.05。因此,每一行都是另一个组(没有包含多个项目的组)。在这种情况下,最大值为10,因为10>0.05。根据您描述的数据量,查询应该可以工作。
|avg_val|
| 2|
| 5|
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;
SELECT AVG(value)
FROM (
SELECT value, CEIL(ROW_NUMBER() OVER () / 3) AS group_num
FROM table_name
) t1
GROUP BY t1.group_num;