見出し画像

【SQL】group by / order by の使い方を例文を用いて解説(練習問題あり)

group by は種類ごとに数値を集計したい際に用いる関数です。
order by は指定したカラムを昇順・降順に並び替える関数です。 descで降順、ascで昇順に並び変えることができます。
group by / order by はcount文との互換性も高く、よく併用されます。
そんなgroup by / order byを初心者でも理解しやすいよう、例題を用いて、徹底解説していきます。

group by / order byの基本構文

group by / order by は以下の構文を使う。

SELECT
 カラム
FROM
 テーブル
group by
 グループ化するカラム
ーーーーーーーーーー
SELECT
 カラム
FROM
 テーブル
order by
 並び替えるカラム desc(asc)

グループ化したい、または並び替えたいカラムを指定することが、group by / order by では必要になる。

上の図で、「部活動のカラムをグループ化」して抜き出す場合は、

SELECT
 部活動
FROM
 1年1組基本情報
group by
  部活動

とクエリーを書くと以下のように結果が返ってくる。

また、idが大きい順に全カラムを並び替えたい場合には、

SELECT
 *
FROM
 1年1組基本情報
order by
  id desc

と書くことで、idが大きい順にデータが抽出されるのだ。

実際の業務で、group by / order by を使用する場合には、どんなデータを出したいのかを明確にし、その上で何をグルーピング、または並び替えるのかを入念に考える必要があるだろう。

group by / order by の練習問題

練習問題を通じて、実践的にgroup by / order byの用法を理解していこう。

練習問題1 : 「1年1組基本情報テーブルから、『部活動ごとの生徒数』を計測しなさい」

まずは、group by を用いる練習問題だ。
回答は以下である。

SELECT
 部活動,
 count(id)
FROM
 1年1組基本情報
group by 
 部活動

生徒数を計測したい場合は、count文を用いる必要がある。
count文の復習はこちら👇

結果は以下のように抽出される。

練習問題2 :  「1年1組基本情報テーブルから、『部活動ごとの生徒数』を多い順に並びかえなさい」

次は、group by と order by を複合した応用問題だ。
回答は以下である。

SELECT
 部活動,
 count(id) as total
FROM
 1年1組基本情報
group by 
 部活動
order by
 total desc

結果は以下のように抽出される。
group byで部活動を指名することによって、計測した数字を、部活動ごとにグルーピング化したのである。

as関数は、抜き出す結果(カラム)に名前をつけるもので、今回は「total」と名付けた。
order by では並び替えるカラムを指定する必要があり、理解しやすくするためにカラム名をas関数を用いて指定したのだ。

group by / order byでよくあるエラーと解消法

group by / order byでよく起こるエラーと、その解消法を解説していく。

group by を指定し忘れるケース

group by を指定しないと、正しくグルーピング処理されず、エラーになるケースが多くある。

先ほどの練習問題1で、

SELECT
 部活動,
 count(id)
FROM
 1年1組基本情報

とクエリーを書いても、グルーピング処理がなされず、正しく「部活動ごとの生徒数」を計測することができない。
group by をつけることで、エラーを解消してもらいたい。

group by・order by・where句 など、関数の順番を間違えるケース

関数の順番を間違えるケースもよくある。

SELECT
 カラム
FROM
 テーブル
where
 カラム 条件
group by
 カラム
order by
 カラム desc(asc)

SELECT > FROM > where > group > order の順番でないと、正しく処理されないため、ぜひ意識してもらいたい。

where句の復習はこちら👇
https://note.com/note_enter/n/nc2f714c9543c

最後に自己紹介

はじめまして、ニューズピックス(https://newspicks.com/)でマーケターをしている平野佑樹です。
普段は、JobPicksというジョブ型キャリアを支援するWebサービス(https://job.newspicks.com/)を運営しており、

  • SQLやGoogle Analyticsを用いた分析

  • TwitterをはじめとしたSNS運用(ショート動画にも挑戦予定)

  • メールマガジン運用

  • Google Optimizeなどを用いたA/Bテスト

  • Search Consoleを用いてコンテンツSEOや開発に関わるSEO施策

など、幅広く業務を担当しています。
マーケターの業務を後押しするtipsをnoteにて発信しております。
(ぜひ、いいねや拡散お願いいたします🙇)

ぜひ、フォローや興味持っていただいた方は、(https://twitter.com/enterrocken)にDMいただけますと幸いです!

この記事が気に入ったらサポートをしてみませんか?