はじめに
株式会社インプルの奈良です。
前回は、詳細な条件でデータをフィルタリングする方法について解説しました。
今回はスカラー関数、集約関数、グループ化(GROUP BY、HAVING)、行の並び替え(ORDER BY)について学びます。
解説で使用するテーブル構成(Peopleテーブル・Ordersテーブル)
Peopleテーブル:
id | name | age |
---|---|---|
1 | John | 20 |
2 | Alice | 25 |
3 | Bob | 30 |
4 | Carol | 22 |
5 | Dave | 18 |
Ordersテーブル:
id | customer_id | product |
---|---|---|
1 | 2 | Apples |
2 | 2 | Bananas |
3 | 3 | Grapes |
4 | 5 | Oranges |
5 | 1 | Apples |
スカラー関数
スカラー関数は、各行の個別の値に作用し、その結果を返します。一般的なスカラー関数には、数値や文字列、日付に対する操作が含まれます。例えば、文字列の長さを返すLENGTH()
関数や、日付の部分を抽出するYEAR()
関数などがあります。(SELECT , WHERE箇所の記載)
SELECT name, LENGTH(name) as name_length
FROM People;
実行結果:
name | name_length |
---|---|
John | 4 |
Alice | 5 |
Bob | 3 |
Carol | 5 |
Dave | 4 |
スカラー関数自体かなりの数があるため、こちらを参考にして必要なものを使うようにしましょう。
集約関数
集約関数は、特定の列の値に対する操作を行い、単一の値を返します。よく使われる集約関数には、COUNT()
, SUM()
, AVG()
, MAX()
, MIN()
などがあります。(SELECT , HAVINGに記載)
SELECT COUNT(*)
FROM People
WHERE age > 20;
実行結果:
COUNT(*) |
---|
3 |
グループ化(GROUP BY、HAVING)
GROUP BY
句は、指定した列の値が同じ行をまとめます。HAVING
句は、G
ROUP BY
句で作成されたグループに対してフィルタリングを行います。
SELECT age, COUNT(*)
FROM People
GROUP BY age // ageをグループ化 通常はGROUP BYと集約関数をセットで運用することが多い
HAVING COUNT(*) > 1; // 抽出条件の指定 抽出条件を集約関数で行うことが多い 例)SUM(合計したい値) < 900など
実行結果:
age | COUNT(*) |
---|---|
22 | 2 |
25 | 3 |
今回はPeopleテーブルのageがそれぞれ異なるため、上記クエリの結果は空になります。もし、ageが同じ値を持つ行が複数ある場合(age:22が2人、age:25が3人)、結果は上記のようになります。
行の並び替え(ORDER BY)
ORDER BY
句を使用すると、指定した列の値に基づいて結果の行を並べ替えることができます。デフォルトでは昇順(ASC)に並び替えられますが、降順(DESC)に並び替えることも可能です。
SELECT *
FROM People
ORDER BY age DESC;
実行結果:
id | name | age |
---|---|---|
3 | Bob | 30 |
2 | Alice | 25 |
4 | Carol | 22 |
1 | John | 20 |
5 | Dave | 18 |
さいごに
今回は、スカラー関数、集約関数、グループ化(GROUP BY、HAVING)、行の並び替え(ORDER BY)について解説しました。
次回は、結合(Join)、合併(Union)、副照会(サブクエリ)についての記事をまとめたいと思います。