如何在SQL中返回每个条件的平均值

问题描述 投票:0回答:2

几天我一直在努力解决这个SQL问题。我对SQL很新。非常感谢您的时间和精力。

问:返回一周中每天的平均到达延迟时间。

期待结果:

+--------------+---------------+
| weekday_name |   avg_delay   |
+--------------+---------------+
|    Friday    | 14.4520127056 |
|    Monday    | 10.5375015249 |
|   Thursday   | 8.47985564693 |
|  Wednesday   |  8.4561902339 |
|   Saturday   | 7.54455459234 |
|   Tuesday    | 4.63152453983 |
|    Sunday    | 4.21165978081 |
+--------------+---------------+

我已准备好两个表:flight_delays和weekdayName我在ipython书中的sql代码:

SELECT distinct w.weekday_name, AVG(f.arr_delay) as average_delay
FROM flight_delays as f, weekdayName as w
WHERE f.day_of_week = w.dayofweek and w.dayofweek <= 7
ORDER BY AVG(arr_delay)

它只返回:

weekday_name    average_delay
Sunday          8.295147670495197

所以它实际上平均了所有七天的结果。但我想平均每天的结果。你能解释一下我的错误在哪里吗?非常感谢。

sql ipython-notebook
2个回答
0
投票

首先,学习使用正确的joingroup by语法。另外,我认为不需要and w.dayofweek <= 7

这样做你想要的吗?

SELECT w.weekday_name, AVG(f.arr_delay) as average_delay
FROM flight_delays f join
     weekdayName w
     on f.day_of_week = w.dayofweek 
GROUP BY w.weekday_name
ORDER BY AVG(arr_delay)

0
投票

做了一些调整:

SELECT w.weekday_name, AVG(f.arr_delay) as average_delay
FROM flight_delays f INNER JOIN weekdayName w
ON f.day_of_week = w.dayofweek
GROUP BY w.weekday_name
ORDER BY AVG(arr_delay);

如果你在AVG中进行聚合(这里是SELECT),你需要在GROUP BY中提供非聚合字段。

© www.soinside.com 2019 - 2024. All rights reserved.