SQL查询平均子查询

3

我正在向一个天气数据库发出SQL查询,我需要风向和风速。
这是我的当前查询:

SELECT wind_direction,
       windspeed
  FROM weather
  WHERE time >= curdate() and
        time < (curdate() + interval 1 day) AND
        windspeed > 0
  ORDER BY wind_direction ASC

这将删除所有风速为0的数值,并仅显示今天的数据。

查询输出:

wind_direction   windspeed  
0               10.1  
0               11.2  
23              7.6  
23              1.4  

如您所见,我得到了重复的值,这是可以理解的,但我的绘图系统不支持这种情况,它不知道该使用哪个值。
我需要的是一个唯一的风向和该方向上的平均风速(avg() windspeed)。

1个回答

5
SELECT  wind_direction, AVG(windspeed)
FROM    weather
WHERE   time >= curdate() and time < (curdate() + interval 1 day)
        AND windspeed > 0
GROUP BY
        wind_direction
ORDER BY
        wind_direction ASC

如果你想要一个单一的wind_direction,比如说,拥有最大平均速度的那个,请使用以下代码:

SELECT  wind_direction, AVG(windspeed) AS avg_speed
FROM    weather
WHERE   time >= curdate() and time < (curdate() + interval 1 day)
        AND windspeed > 0
GROUP BY
        wind_direction
ORDER BY
        avg_speed DESC 
LIMIT 1

这是正确的吗?当MySQL对数据进行分组时,它如何知道要使用哪个AVG(windspeed)? - HyperDevil
@HyperDevil:从 GROUP BY,它告诉我们要合并哪些记录(在你的情况下是共享相同 wind_direction 值的记录)。 - Quassnoi
但是在选择中有多个风向? - HyperDevil
@HyperDevil:是的,但它们很独特。请发布一些示例数据和您想要获得的结果集。 - Quassnoi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接