14 集約関数
集約関数(Aggregate Function)は,複数の値を受け取り,1つの値を返す関数です.SQLでは,集約関数を使用して,データの集計や統計情報を取得することができます.
以下は,SQLでよく使用される集約関数です.
SUM:各行の合計値を求めるAVG:各行の平均値を求めるMIN:各行の最小値を求めるMAX:各行の最大値を求めるCOUNT:行数を計算する
14.1 MIN()関数とMAX()関数
MIN()関数は,指定した列の最小値を返します.MAX()関数は,指定した列の最大値を返します.
14.1.1 構文
SELECT MIN(column_name) AS alias
FROM table_name
WHERE condition;SELECT MAX(column_name) AS alias
FROM table_name
WHERE condition;ここで,AS aliasは,結果の列名を指定するためのキーワードです.aliasは,任意の列名を指定できます.
14.1.2 使用例
次の例では,productsテーブルから,price列の最小値と最大値を取得します.
CREATE TABLE products (
id INT,
name TEXT,
price REAL
);
INSERT INTO products (id, name, price) VALUES
(1, 'Product A', 10.0),
(2, 'Product B', 20.0),
(3, 'Product C', 30.0);
SELECT MIN(price)
FROM products;
SELECT MAX(price)
FROM products;すると,次のような結果が得られます.
| MIN(price) |
|---|
| 10.0 |
| MAX(price) |
|---|
| 30.0 |
ASを使用して,列名を変更することもできます.
SELECT MIN(price) AS min_price
FROM products;
SELECT MAX(price) AS max_price
FROM products;すると,次のような結果が得られます.
| min_price |
|---|
| 10.0 |
| max_price |
|---|
| 30.0 |
14.2 SUM()関数とAVG()関数
SUM()関数は,指定した列の合計値を返します.AVG()関数は,指定した列の平均値を返します.
14.2.1 構文
SELECT SUM(column_name) AS alias
FROM table_name
WHERE condition;SELECT AVG(column_name) AS alias
FROM table_name
WHERE condition;14.2.2 使用例
次の例では,productsテーブルから,price列の合計値と平均値を取得します.
SELECT SUM(price) AS total_price
FROM products;SELECT AVG(price) AS average_price
FROM products;14.3 COUNT()関数
COUNT()関数は,指定した列の行数をカウントします.
14.3.1 構文
SELECT COUNT(column_name)
FROM table_name
WHERE condition;14.3.2 使用例
productsテーブルが次のように定義されているとします.
CREATE TABLE products (
id INT,
name TEXT,
price REAL
);
INSERT INTO products (id, name, price) VALUES
(1, 'Product A', 10.0),
(2, 'Product B', 20.0),
(3, 'Product C', 30.0);
(4, 'Product D', NULL);下の例では,productsテーブルの行数をカウントします.
SELECT COUNT(*)
FROM products;すると,次のような結果が得られます.
| COUNT(*) |
|---|
| 4 |
COUNT()関数は,特定の列に対しても使用できます.NULL値はカウントされません.
SELECT COUNT(price)
FROM products;すると,次のような結果が得られます.
| COUNT(price) |
|---|
| 3 |
COUNT(*)は,テーブル内のすべての行をカウントしますが,COUNT(column_name)は,指定した列にNULLでない値がある行のみをカウントします.
また,WHERE句を使用して,特定の条件に一致する行のみをカウントすることもできます.
SELECT COUNT(*)
FROM products
WHERE price > 15.0;14.4 練習
下記のscoresテーブルを使用して,集約関数の練習を行います.
CREATE TABLE scores (
StudentID TEXT,
CourseID TEXT,
Score INTEGER,
PRIMARY KEY (StudentID, CourseID)
);
INSERT INTO scores (StudentID, CourseID, Score) VALUES
('S001', 'C001', 85),
('S002', 'C001', 78),
('S003', 'C001', 92),
('S001', 'C002', 88),
('S002', 'C002', 90),
('S003', 'C002', 95);- 科目
C001の最高得点を求めよ. - 科目
C002の平均得点を求めよ. - 科目
C002の学生数を求めよ. - 科目
C002において,得点が90点以上の学生の数を求めよ. - 科目
C002において,90点以上の学生のIDと得点を取得せよ.