gpt4 book ai didi

MySQL如何将值的平均值放入特定范围

转载 作者:可可西里 更新时间:2023-11-01 07:50:51 25 4
gpt4 key购买 nike

我有下表数据:

value
1
5
10.5
12
36

我想将这些值映射到:

range      avg
0-21 (1 + 5 + 10.5 + 12) / 4
21.001-34 0
34.001-64 36
64 + 0

基本上将每个值映射到范围并计算每个范围内所有值的平均值。

我尝试过:

select 
case
when avggeneral between 0 and 21 then ' 0-21'
when avggeneral between 21.00001 and 34 then ' 21-34'
when avggeneral between 34.00001 and 64 then ' 34-64'
else '64+'
end as 'range',
AVG(*) as 'avg'
from table

但这行不通...我不知道如何制作静态范围...

我如何在 MySQL 中做到这一点?

方法应该是:1. 将值映射到这些组(0-21、21-34 等)2.计算每组的AVG。

上面例子的期望输出是这样的:

range      avg
0-21 7.125
21.001-34 0
34.001-64 36
64 + 0

range 列是静态的。总是有 5 行。avg 列是动态的。那里的值是 value 列的实际 AVG。

最佳答案

您可以使用 UNION ALLLEFT JOIN 构建范围列表:

SELECT CONCAT(IFNULL(ranges.min, '∞'), '-', IFNULL(ranges.max, '∞')) AS `range`, avg(value) AS avg
FROM (
SELECT 0 AS min, 21 AS max UNION ALL
SELECT 21, 34 UNION ALL
SELECT 34, 64 UNION ALL
SELECT 64, NULL
) AS ranges
LEFT JOIN t ON (ranges.min IS NULL OR value >= ranges.min) AND
(ranges.max IS NULL OR value < ranges.max)
GROUP BY ranges.min, ranges.max

请注意,上面的查询会将 20.9999 放入 [0-21) 并将 21.0000 放入 [21-34) 范围。

关于MySQL如何将值的平均值放入特定范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com