我有一张功率曲线的xy图表。打开 y 轴并打开 x 轴。
我从MySQL表中获取值。
如何在风力列中获得间隔为1的平均功率。
例:
Wind | Power
10.2 1245
10.2 1245
9.7 1145
8.7 1001
11.1 1345
9.3 1100
10.6 1284
8 987
5.5 352
...
我需要的是:
Wind | Avg(Power)
0-1 ...
1-2 ...
2-3 ...
...
提前谢谢
修改
谢谢大家的回答!
对于我的特殊情况,风总是在0到25米/秒之间。 我需要获得平均功率的间隔是0.5。
所以:
0 - 0,25
0,25 - 0,75
0,75 - 1,25
1,25 - 1,75
... - 25
答案 0 :(得分:3)
这可以是一个聚合查询,您可以使用内射函数对个别观察进行分类。内射函数是FLOOR(Wind)
。
这是查询(http://sqlfiddle.com/#!2/9e64b6/9/0),包括范围的显示内容。
SELECT CONCAT(FLOOR(Wind),'-',FLOOR(Wind)+1) AS Wind,
AVG(Power) AS Power
FROM power
GROUP BY FLOOR(Wind)
ORDER BY FLOOR(Wind)
当然,这使用MySQL AVG()
函数,生成算术平均值。我认为你正在开发的那种应用程序更喜欢几何平均值,但我不确定。
它还会产生稀疏的结果集。
答案 1 :(得分:2)
我认为在这种情况下,最好使用GROUP BY CASE
语句。
SELECT CASE
WHEN Wind < 1 THEN '0-1'
WHEN Wind >= 1 AND Wind < 2 THEN '1-2'
WHEN Wind >= 2 AND Wind < 3 THEN '2-3'
WHEN Wind >= 3 AND Wind < 4 THEN '3-4'
WHEN Wind >= 4 AND Wind < 5 THEN '4-5'
WHEN Wind >= 5 AND Wind < 6 THEN '5-6'
WHEN Wind >= 6 AND Wind < 7 THEN '6-7'
WHEN Wind >= 7 AND Wind < 8 THEN '7-8'
WHEN Wind >= 8 AND Wind < 9 THEN '8-9'
WHEN Wind >= 9 AND Wind < 10 THEN '9-10'
WHEN Wind >= 10 AND Wind < 11 THEN '10-11'
WHEN Wind >= 11 AND Wind < 12 THEN '11-12'
ELSE 'Other'
END as Wind,
AVG(Power) as Power
FROM power
GROUP BY CASE
WHEN Wind < 1 THEN '0-1'
WHEN Wind >= 1 AND Wind < 2 THEN '1-2'
WHEN Wind >= 2 AND Wind < 3 THEN '2-3'
WHEN Wind >= 3 AND Wind < 4 THEN '3-4'
WHEN Wind >= 4 AND Wind < 5 THEN '4-5'
WHEN Wind >= 5 AND Wind < 6 THEN '5-6'
WHEN Wind >= 6 AND Wind < 7 THEN '6-7'
WHEN Wind >= 7 AND Wind < 8 THEN '7-8'
WHEN Wind >= 8 AND Wind < 9 THEN '8-9'
WHEN Wind >= 9 AND Wind < 10 THEN '9-10'
WHEN Wind >= 10 AND Wind < 11 THEN '10-11'
WHEN Wind >= 11 AND Wind < 12 THEN '11-12'
ELSE 'Other'
END
这样,如果你想改变每个小组所涵盖的范围,你可以很容易地做到这一点。