SQL - Group By句

こんにちは、未来のSQL魔術師たち!今日は、私たちのSQLツールボックスの中でも最も強力なツールのひとつであるGROUP BY句に潜り込みます。あなたの近所の親切なコンピュータ教師として、この旅を一歩一歩ガイドします。お気に入りの飲み物を手に取り、リラックスして、一緒にこのエキサイティングなSQL冒険に乗り出しましょう!

SQL - Group By Clause

SQL GROUP BY句

思い浮かべてください、巨大な図書館を整理している場面。本が處處に散らばっており、あなたはそれらをgenre(ジャンル)ごとに並べたいと考えています。これがSQLにおけるGROUP BY句が行うことです。データを整然とした論理的なグループに整理してくれます。

GROUP BY句は、指定された列の同じ値を持つ行をグループ化するために使用されます。これは、各グループの行に対して計算を行うためにしばしば集約関数とともに使用されます。

簡単な例から始めましょう:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department;

このクエリでは、従業員をdepartment(部署)ごとにグループ化し、各部署の従業員数を数えます。これは、「各genreにどれだけの本があるか」と尋ねるのに似ています。

GROUP BY句と集約関数

ここで少しスパイスを加えましょう。GROUP BY句は、集約関数と組み合わせることで本当に輝きます。これらの関数は、値のセットに対して計算を行い、単一の結果を返します。一般的な集約関数にはCOUNT()、SUM()、AVG()、MAX()、MIN()などがあります。

以下は、これらの関数とその用途の一覧です:

関数 説明
COUNT() 行数を数えます
SUM() 値のセットの合計を計算します
AVG() 値のセットの平均を計算します
MAX() 値のセットの最大値を返します
MIN() 値のセットの最小値を返します

これらを実行してみましょう:

SELECT department, 
       COUNT(*) as employee_count,
       AVG(salary) as avg_salary,
       MAX(salary) as max_salary,
       MIN(salary) as min_salary
FROM employees
GROUP BY department;

このクエリは、各部署に関する多くの情報を提供します:どれだけの従業員がいるか、平均給与、最高給与、最低給与など。これは、図書館の各genreに関する包括的な報告書を得るのに似ています!

単一列でのGROUP BY句

時々、私たちはデータの特定の側面に焦点を当てたい考えます。例えば、各役割の従業員数を知りたい場合:

SELECT job_title, COUNT(*) as employee_count
FROM employees
GROUP BY job_title;

このクエリは、従業員をjob_title(役割)ごとにグループ化し、各役割の人数を数えます。これは、ミステリ小説、ロマンス小説、SF小説の本の数を数えるのに似ています。

複数列でのGROUP BY句

しかし、一列で止まらなければなりません。複数の列でグループ化することで、さらに具体的な情報を得ることができます。従業員を部署と役割の両方でグループ化してみましょう:

SELECT department, job_title, COUNT(*) as employee_count
FROM employees
GROUP BY department, job_title;

このクエリは、各部署内の各役割における従業員数を教えてくれます。これは、まずgenreごとに、その中で作者ごとに本を整理するのに似ています。

GROUP BY句とORDER BY句

ここで、結果に秩序を与えましょう。ORDER BY句は、グループ化されたデータを並べ替えるのに役立ちます:

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
ORDER BY employee_count DESC;

このクエリは、部署ごとに従業員をグループ化し、その結果を従業員数の降順で並べ替えます。最も多くの従業員を持つ部署が最初に表示されます。これは、図書館のgenreを最多から最少に並べ替えるのに似ています。

GROUP BY句とHAVING句

最後に、HAVING句についてお話ししましょう。WHERE句はグループ化される前に行をフィルタリングしますが、HAVING句はグループ自体をフィルタリングします。これは、「100冊以上の本を持つgenreを表示してくれ」と言うのに似ています。

SELECT department, COUNT(*) as employee_count
FROM employees
GROUP BY department
HAVING employee_count > 50;

このクエリは、50人以上の従業員を持つ部署のみを表示します。これは、より大きな部署や、図書館のアナロジーで言えばより人気のあるgenreに焦点を当てるのに役立ちます。

そして、ここまでがGROUP BY句の旅です。基本的な使い方から複雑なアプリケーションまで、ORDER BY句やHAVING句と組み合わせて使いました。実践は完璧を生みますので、自分のデータセットでこれらのクエリを試してみてください。

SQLは初めては厄介に見えるかもしれませんが、時間と練習を重ねることで、プロのようにデータをグループ化し集約するようになります。もしかしたら、あなたもGROUP BYや集約関数で世界を見るようになるかもしれません!(ただし、パーティで友達をGROUP BYすることは避けてください - 信じてください、うまくいきません。)

codingを続け、学び続け、そして最も重要なのは、SQLを楽しむことを忘れないでください!

Credits: Image by storyset