Menu
Coddy logo textTech

Grouping Part 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

これはまずレコードごとに処理を行い、price が 25 より大きいすべてのレコードをフィルター処理します。その後で GROUP BY 句を実行し、平均価格が 40 より大きいすべての category をフィルター処理します。

challenge icon

チャレンジ

中級

利用可能なテーブルとカラム:

  • <strong>earthquakes</strong>: <strong>location</strong>, <strong>amplitude</strong>, <strong>period</strong>

リヒター・スケールは、地震の規模(マグニチュード)を測定するために使用される対数スケールです。

大規模な地震における、各ロケーションごとの平均マグニチュードを返す必要があります。

大規模な地震は以下のように定義されます:

  • 振幅(amplitude)が 1 以上
  • 波の周期(period)が 1 分以上

このチャレンジでは、別の数式 M = (A/T)<sup>2</sup> / T を使用します。これは M = ((A/T)*(A/T)) / T と同等です。

大規模な地震のみを含めて、ロケーション(location)と各ロケーションの平均マグニチュード(カラム名は avg_magnitude)を返してください。avg_magnitude が 1 より大きいロケーションのみを結果に含めてください。

結果は小数第 2 位に四捨五入(ROUND)してください。

自分で試してみよう

quiz icon腕試し

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

基礎のすべてのレッスン