その他

SQL入門: ステップ3 – 関数(スカラー関数、集約関数)、グループ化(GROUP BY、HAVING)、並び替え(ORDER BY)の活用

その他
この記事は約3分で読めます。

はじめに

株式会社インプルの奈良です。

前回は、詳細な条件でデータをフィルタリングする方法について解説しました。

今回はスカラー関数、集約関数、グループ化(GROUP BY、HAVING)、行の並び替え(ORDER BY)について学びます。

解説で使用するテーブル構成(Peopleテーブル・Ordersテーブル)

Peopleテーブル

idnameage
1John20
2Alice25
3Bob30
4Carol22
5Dave18

Ordersテーブル

idcustomer_idproduct
12Apples
22Bananas
33Grapes
45Oranges
51Apples

スカラー関数

スカラー関数は、各行の個別の値に作用し、その結果を返します。一般的なスカラー関数には、数値や文字列、日付に対する操作が含まれます。例えば、文字列の長さを返すLENGTH()関数や、日付の部分を抽出するYEAR()関数などがあります。(SELECT , WHERE箇所の記載)

SELECT name, LENGTH(name) as name_length
FROM People;

実行結果:

namename_length
John4
Alice5
Bob3
Carol5
Dave4
奈良
奈良

スカラー関数自体かなりの数があるため、こちらを参考にして必要なものを使うようにしましょう。

IBM i 7.1
IBM Documentation.

集約関数

集約関数は、特定の列の値に対する操作を行い、単一の値を返します。よく使われる集約関数には、COUNT(), SUM(), AVG(), MAX(), MIN()などがあります。(SELECT , HAVINGに記載)

SELECT COUNT(*)
FROM People
WHERE age > 20;

実行結果:

COUNT(*)
3

グループ化(GROUP BY、HAVING)

GROUP BYは、指定した列の値が同じ行をまとめます。HAVINGは、GROUP BY句で作成されたグループに対してフィルタリングを行います。

SELECT age, COUNT(*)
FROM People
GROUP BY age // ageをグループ化 通常はGROUP BYと集約関数をセットで運用することが多い
HAVING COUNT(*) > 1; // 抽出条件の指定 抽出条件を集約関数で行うことが多い 例)SUM(合計したい値) < 900など

実行結果:

ageCOUNT(*)
222
253

今回はPeopleテーブルのageがそれぞれ異なるため、上記クエリの結果は空になります。もし、ageが同じ値を持つ行が複数ある場合(age:22が2人、age:25が3人)、結果は上記のようになります。

行の並び替え(ORDER BY)

ORDER BYを使用すると、指定した列の値に基づいて結果の行を並べ替えることができます。デフォルトでは昇順(ASC)に並び替えられますが、降順(DESC)に並び替えることも可能です。

SELECT *
FROM People
ORDER BY age DESC;

実行結果:

idnameage
3Bob30
2Alice25
4Carol22
1John20
5Dave18

さいごに

今回は、スカラー関数、集約関数、グループ化(GROUP BY、HAVING)、行の並び替え(ORDER BY)について解説しました。

次回は、結合(Join)、合併(Union)、副照会(サブクエリ)についての記事をまとめたいと思います。