14  集約関数

集約関数(Aggregate Function)は,複数の値を受け取り,1つの値を返す関数である.SQLでは,集約関数を使用して,データの集計や統計情報を取得することができる.

以下は,SQLでよく使用される集約関数である.

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);
  1. 科目C001の最高得点を求めよ.
  2. 科目C002の平均得点を求めよ.
  3. 科目C002の学生数を求めよ.
  4. 科目C002において,得点が90点以上の学生の数を求めよ.
  5. 科目C002において,90点以上の学生のIDと得点を取得せよ.