【SQL入門】集約関数・GROUP BYの使い方|SQL Bolt⑩ 和訳・演習解答

集約を使ったクエリ・GROUP BY句と集約関数

本記事では、海外のSQL学習サイト【SQL Bolt】を利用して、データベース初心者向けにSQLの基本を解説します。

第9回は「SQL Lesson 10: Queries with aggregates (Pt. 1)集約を使ったクエリについてです。

目次

ざっくり日本語訳

集約関数の使い方

前回のレッスンで紹介した単純な式に加えて、SQL では、データ行のグループに関する情報を要約できる集約式 (または関数) の使用もサポートされています。

今回使用したPixarのデータベースでは、集約関数を使用して、

  • Pixarは何本の映画を制作したのか
  • 毎年Pixarの映画の中で最も売上が多いのは何か

といったことを調べることができます。

ASで列名に別の名前を付ける方法

SELECT AGG_FUNC(column_or_expression) AS aggregate_description, … FROM テーブル
WHERE constraint_expression;

グループ化を指定しないと、各集約関数は結果行のセット全体に対して実行され、1つの値を返します。また、通常の式と同様に、集約関数にエイリアスを与えることで、結果を読みやすく、処理しやすくすることができます。

よく使われる集約関数5つ

次の5つは、主要なデータベース(MySQL, Postgres, SQLite, Microsoft SQL Server)で使える関数です。

COUNT(*)
COUNT(列名)
列の名前が指定されていない場合は、グループ内の行数をカウント。
そうでない場合は、指定された列のNULLでない値を持つグループの行数をカウント。
MIN(列名)グループ内のすべての行について、指定された列の最小の数値を検索
MAX(列名)グループ内のすべての行について、指定された列の中で最大の数値を検索
AVG(列名)グループ内のすべての行について、指定された列の平均値を検索
SUM(列名)グループ内のすべての行について、指定された列のすべての数値の合計を検索

各データベースのマニュアルはこちらで確認できます↓

集約関数とGROUP BY句

すべての行を集約するだけでなく、データをグループ分けして個々に集約関数を適用することもできます 。

この場合、GROUP BY句で定義されたグループの数だけ結果が作られます。

SELECT AGG_FUNC(column_or_expression) AS aggregate_description, …
FROM テーブル名
WHERE 検索条件;

GROUP BY句は、指定した列の中で同じ値を持つ行をグループ化することで機能します。

演習問題の和訳・解答

1. Find the longest time that an employee has been at the studio

【和訳】スタジオにおける従業員の最長勤務期間を調べてください。

SELECT MAX(Years_employed) FROM employees;
2. For each role, find the average number of years employed by employees in that role

【和訳】職種ごとに、その職種に就いている従業員の平均勤続年数を求めてください。

SELECT Role, AVG(Years_employed) FROM employees GROUP BY Role;
3. Find the total number of employee years worked in each building

【和訳】従業員の勤続年数の合計を建物ごとに求めてください。

SELECT Building, SUM(Years_employed) FROM employees GROUP BY Building;
集約を使ったクエリ・GROUP BY句と集約関数

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次