2017-09-11 22 views
0

私はCodecademy hereからSQL変換レッスンを行っています。私はGROUP BY句の後になぜそれらの数字を使用しているのか、そしてその数字が何をしているのかわかりません。コースを通過した誰もが私に知らせるために親切なことができますか?左から右へGROUP BY句でSQL GROUP BY用途

SELECT dep_month, 
      dep_day_of_week, 
      dep_date, 
      COUNT(*) AS flight_count 
     FROM flights 
    GROUP BY 1,2,3 
+0

脇役:うまく構築されたデータベースでは、 'dep_month'と' dep_day_of_week'はありません。なぜなら両方とも 'dep_date'から明らかに得られるからです。データベースでは、情報が重複して保存されないようにします。これは、矛盾(日付の月に一致しない月など)が発生する可能性があるためです。 –

+0

別の謝辞:実際のところ、ほとんどのクエリは 'ORDER BY'節を持っています。あなたは通常、日付でグループ化せず、結果を日付順に表示しません。しかし、結果をデータグリッドに読み込んでデータそのものを注文する場合は、もちろん、順序付けされていないデータセットで埋めることもできます。ですから、「ORDER BY」のないクエリは存在しないと言っているわけではありません。彼らはあまり一般的ではありません。 –

答えて

6

数字は単に、SELECTリストの列を参照してください。したがって、クエリは次のものと同じです。

SELECT 
    dep_month, 
    dep_day_of_week, 
    dep_date, 
    COUNT(*) AS flight_count 
FROM flights 
GROUP BY 
    dep_month, 
    dep_day_of_week, 
    dep_date 

上記のクエリは、私が実際に使用するものです。理由は、GROUP BY 1,2,3は、列ではなくの位置を指すためです。誰かがSELECTを後でリファクタリングすると、彼はあなたの質問を破る危険性があります。

0

基本的には、選択クエリの1列目、2列目、3列目です。

3

明らかにこれらは位置番号です。だから、これは最初の3つの列にGROUP BYです:

GROUP BY 1,2,3 

はここ

GROUP BY dep_month, dep_day_of_week, dep_date 

を意味します。 GROUP BY句がSELECT句を実行することになっているので、位置を知ることができないので、

これは、SQL標準に準拠していません。 ORDER BY句でのみ認識されます。これは、SELECT句の後に記述されるためです。わずかなDBMSだけが例外を作成し、この位置宣言をGROUP BYに許可します。したがって、これをチュートリアルで示すのは悪いことです。