第6章. GROUP BYとORDER BY
この作品はAIを使って翻訳されている。ご意見、ご感想をお待ちしている:translation-feedback@oreilly.com
データの集計(ロールアップ、サマライズ、グループ化とも呼ばれる)とは、多数のレコードから何らかの合計を作成することである。 合計、最小、最大、カウント、平均は一般的な集計演算子である。SQLでは、これらの合計を指定した列でグループ化することができ、集約の範囲を簡単に制御することができる。
レコードのグループ化
まず、最も単純な集計を実行する:テーブルのレコード数をカウントする。SQLエディタを開き、 station data のレコードのカウントを取得する:
SELECTCOUNT(*)ASrecord_countFROMstation_data;
COUNT(*) はレコードのカウントを意味する。WHERE のように、他のSQL演算子と組み合わせて使うこともできる。トルネードが存在したレコードの数をカウントするには、次のように入力する:
SELECTCOUNT(*)ASrecord_countFROMstation_dataWHEREtornado=1;
竜巻が発生した3,000件の記録が確認された。 しかし、もし年ごとにカウントを分けたいとしたらどうだろうか(図6-1)。それもこのクエリでできる:
SELECTyear,COUNT(*)ASrecord_countFROMstation_dataWHEREtornado=1GROUPBYyear;
図6-1. 年別の竜巻カウントを取得する
このデータが急に意味を持つようになった。年別の竜巻目撃カウントである。このクエリを分解して、どうしてこのようなことが起こったのかを見てみよう。
まず、year を選択し、次にレコードからCOUNT(*) を選択し、tornado が真であるレコードだけをフィルタリングする:
SELECTyear,COUNT(*)ASrecord_countFROMstation_dataWHEREtornado=1GROUPBYyear;
ただし、year でグループ化することも指定している。これによって、事実上、年ごとのレコード数をカウントすることができる。太字で強調表示された最後の行が、このグループ化を実行している:
SELECTyear,COUNT(*)ASrecord_countFROMstation_dataWHEREtornado=1GROUPBYyear;
このデータを複数のフィールドでスライスすることができる。year とmonth によるカウントが欲しければ、month フィールドでもグループ化できる(図6-2):
SELECTyear,month,COUNT(*)ASrecord_countFROMstation_dataWHEREtornado=1GROUPBYyear,month
図6-2. 年・月別竜巻カウント。
GROUP BYまた、 で列を指定する代わりに、序数位を使用することもできる。序数位 は、SELECT ステートメント内の各項目の数値位置に対応する。したがって、 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access