2017-12-20 6 views
0

私はこのSQLの質問に数日間苦労しています。私はSQLにはかなり新しいです。本当にあなたの時間と労力を感謝します。SQLの各条件の平均を返す方法

Q:各曜日の平均到着遅延時間を返します。

期待する結果:flight_delaysとweekdayName ipython本の中で私の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 | 
+--------------+---------------+ 

は、私はすでに2台用意してい

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 

それで、実際には7日間の結果すべてを平均します。しかし、私は毎日の平均結果を出したい。私の間違いはどこにあるのか教えてください。どうもありがとう。

+2

'distinct'を削除し、' group by w.weekday_name'を使用してください。 –

+0

また、WHERE句にカンマが表示されているときは何か間違っています。適切なJOINを使用してください。 –

+0

ありがとうsooooo! –

答えて

0

まず、適切なjoingroup byの構文を使用する方法を学びます。また、私はand w.dayofweek <= 7が必要とは思わない。

これは必要な操作ですか?

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); 

あなたSELECTに(ここではAVG)集約を行っている場合、あなたはGROUP BYにおける非集計フィールドを提供する必要があります。いくつかの調整を行った

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

ありがとうございました。これは私が欲しいものです。 –

0

+0

私の質問にお答えしてくれてありがとう。 –

+0

あなたの状態で 'w.dayofweek <= 7'を望んでいたかどうかは以前は分かりませんでした。それが編集されれば削除されます。 – Vashi

関連する問題