几天我一直在努力解决这个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
所以它实际上平均了所有七天的结果。但我想平均每天的结果。你能解释一下我的错误在哪里吗?非常感谢。
首先,学习使用正确的join
和group 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)
做了一些调整:
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
中提供非聚合字段。