グループ化 2
CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 37/72。
WHEREキーワードは、各レコードに対して個別に条件を実行します。例:
SELECT * FROM table1
WHERE col1 > col2col1 > col2はすべてのレコードに対して実行され、条件を満たしているかどうかを確認します。
しかし、集計結果をフィルタリングしたい場合はどうすればよいでしょうか。例:
SELECT category, AVG(price) FROM table1
WHERE AVG(price) > 40
GROUP BY categoryこれは機能しません。WHERE は集計を確認できないためです。そのために、HAVING キーワードがあります。これは集計条件によってデータをフィルタリングします。
SELECT category, AVG(price) FROM table1
GROUP BY category
HAVING AVG(price) > 40これにより、平均価格が40を超えるすべてのカテゴリが絞り込まれます。
HAVING句とWHERE句を組み合わせる場合は、次のように記述します:
SELECT category, AVG(price) FROM table1
WHERE price > 25
GROUP BY category
HAVING AVG(price) > 40まずレコードごとに処理を進め、価格が25より大きいすべてのレコードをフィルタリングします。その後で初めてGROUP BY句を実行し、平均価格が40より大きいすべてのカテゴリをフィルタリングします。
チャレンジ
中級利用可能なテーブルとカラム:
earthquakes:location、amplitude、period
リヒター・スケールは、地震のマグニチュードを測定するために使用される対数スケールです。
すべての主要な地震について、各場所ごとの平均マグニチュードを返す必要があります。
主要な地震は、次のように定義されます:
- 振幅が1以上である
- 波の周期が1分以上である
このチャレンジでは、別の公式を使用します:M = (A/T)^2 / T。これはM = ((A/T)*(A/T)) / Tと同等です。ここで、Mはマグニチュード、Aはamplitudeカラム、Tはperiodカラムです。
主要な地震のみを対象として、各場所の場所と平均マグニチュードを返してください(カラム名はavg_magnitudeとします)。結果には、avg_magnitudeが1より大きい場所のみを含めてください。
結果を小数点以下2桁に丸めてください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
自分で練習してみよう: SQLプレイグラウンド