我有以下表格数据:
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. 计算每组的AVERAGE。
上面示例所需的输出是这样的:
range avg
0-21 7.125
21.001-34 0
34.001-64 36
64 + 0
The range
列是静态的。始终为 5 行。
这avg
列是动态的..其中的值是实际的平均值value
column.
您可以使用以下方式构建范围列表UNION ALL
and LEFT 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
inside [0-21)
and 21.0000
inside [21-34)
range.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)