Menu
CoddyTech

グループ化 2

CoddyのSQLジャーニー「基礎」セクションの一部。レッスン 37/72。

WHEREキーワードは、各レコードに対して個別に条件を実行します。たとえば、次のようになります。

SELECT * FROM table1
WHERE col1 > col2

col1 > 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

まずレコードを1件ずつ確認し、価格が25より大きいすべてのレコードを絞り込み、その後で初めてGROUP BY句を実行し、平均価格が40より大きいすべてのカテゴリを絞り込みます。

challenge icon

チャレンジ

中級

利用可能なテーブルと列:

  • 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桁に丸めてください。

自分で試してみよう

quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

基礎のすべてのレッスン

自分で練習してみよう: SQLプレイグラウンド