「GROUP BY」 < データのグルーピングと集計 >

データを集計したいときはどうすればいいの?



そんな時は、「GROUP BY」と「集計関数」を使用します。
グルーピングしたいカラムをもとに集計関数を使って合計や平均、最小値や最大値,カウントなどを計算することができます。
では、実際のデータを用いてやってみましょう!
以下のデータは、1896年から2016年までに開催された全オリンピックのアスリートとイベントのデータです。(テーブル名:OLYMPICS_athlete_events)


OLYMPICS_athlete_events | テーブル名 |
---|---|
ID | データセット内の順番に基づいてアスリートに割り当てられたID番号 |
Name | アスリートの名前 |
Sex | アスリートの性別 |
Age | アスリートの年齢 |
Height | アスリートの身長(センチメートル単位) |
Weight | アスリートの体重(キログラム単位) |
Team | このアスリートが所属する国 |
NOC | アスリートが所属する国を表す3文字の略語 |
Games | このオリンピック大会の開催年と季節 |
Year | 大会の開催年 |
Season | 大会の季節(SummerまたはWinter) |
City | オリンピックが開催された都市 |
Sport | 大会の種目 |
Event | 大会の名前 |
Medal | アスリートが獲得したメダル(獲得したメダルがない場合は「NA」) |



この中から例えば、国籍ごとの金メダルの獲得数を集計してみましょう。
その際は「GROUP BY」と「count」を使用します。
以下のようにSQLを記述します。
グルーピングしたいカラムをグルーピングして、集計を行いたいカラムごとの集計をする
Teamをグルーピングして、Teamごとにレコード数を集計をする。
(条件:金メダル獲得者、Teamレコード数降順、データ数20件制限)
SELECT Name,Sex,Age,Team,Medal, count(Team)
FROM OLYMPICS_athlete_events
WHERE Medal = 'Gold'
GROUP BY Team
ORDER BY count(Team) DESC
LIMIT 20;





なるほど〜、日本は16番目に金メダル獲得数が多い国なのか!



それでは少し応用をやってみましょう



今度は、金メダルを獲得した人の国籍ごとの年齢の平均と最小値と最大値を抽出して、獲得した金メダル数が多い順にTOP20のデータを表示してみましょう。
平均値はavg,最小値はmin,最大値はmax を用います。
国籍をグルーピングして、国籍ごとにレコード数を集計し、年齢の平均、最小値、最大値を抽出する。
(条件:金メダル獲得者、年齢がNA値以外、Teamレコード数降順、データ数20件制限)
SELECT Team,Medal
,count(Team)
,avg(Age)
,min(Age)
,max(Age)
FROM OLYMPICS_athlete_events
WHERE Medal = 'Gold' AND Age != 'NA'
GROUP BY Team
ORDER BY count(Team) DESC
LIMIT 20;





ふむふむなるほど〜、GROUP BYと集計関数を利用することでデータの合計値や最大最小値、平均値など様々な集計を行うことができるんですね!



そういうことです。
演習



それでは演習をしてみましょう。
準備中
まとめ
- データのグルーピング:GROUP BY
- 合計やカウント、最大値、最小値などを求める関数:集計関数(sum,count,avg,min,max…)
- 「GROUP BY」は「WHERE」と「ORDER BY」の間に記述する
未経験からデータサイエンティストへ!転職支援!
ROYAL AGENT&Co.では、全コンサルタントが5年以上のキャリアコンサルティング経験を持ち、データサイエンティストやAI,DX人材のご紹介に強い転職支援を行っております。
候補者様一人ひとりのキャリアに寄り添ったご支援を心がけ、無闇に求人をご紹介するのではなく、丁寧なカウンセリングを通してご志向性にあった求人をピンポイントにご紹介させて頂いております。未経験からのデータサイエンティスト転職支援実績も多数ございます。
無理な勧誘など一切ありませんので、キャリアのご相談等、まずはお気軽にお問合せください!心よりお待ちしております。