Grouping Part 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 categoryWHERE は集計をチェックできないため、これは機能しません。そのために 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 をフィルター処理します。
チャレンジ
中級利用可能なテーブルとカラム:
<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)してください。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
基礎のすべてのレッスン
4More Keywords
The IN keywordThe BETWEEN keywordThe LIKE keywordThe AS keywordRecap - Cellphone Models2Conditions
Conditions BasicsThe AND keywordThe OR keywordThe NOT keywordMultiple Conditions CombinedParenthesisBooleans5Arithmetic Operations
Mathematical OperatorsMathematical ColumnsThe Modulo OperationThe ROUND() Function3Specific Return Format
Null valuesSort Results Part 1Sort Results Part 2Recap - Cyber Security FirmLimit number of recordsRecap - Vehicle Factory6Intro Challenges
Recap - Parliamentary ElectionRecap - Police Criminal ArrestRecap - Bar Beverage ContainerRecap - Engineer new columns