サンプルコード:PERCENTILE_CONT 関数と PERCENTILE_DISC 関数
SQL Server で中央値を計算する関数
- PERCENTILE_CONT 関数
PERCENTILE_CONT 関数は、連続的な百分位数を計算するために使用されます。中央値は 50 番目の百分位数であるため、以下のように記述できます。
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 列名)
FROM テーブル名;
引数
0.5
: 中央値を表す百分位数WITHIN GROUP (ORDER BY 列名)
: 中央値を計算する列を指定
例
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 年齢)
FROM 従業員;
このクエリは、従業員テーブルの年齢列の中央値を計算します。
SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY 列名)
FROM テーブル名;
SELECT PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY テスト結果)
FROM 生徒;
PERCENTILE_CONT 関数と PERCENTILE_DISC 関数の違い
PERCENTILE_CONT 関数は、データが連続的に分布していることを前提としています。一方、PERCENTILE_DISC 関数は、データが離散的に分布していることを前提としています。
データが連続的に分布している場合は、PERCENTILE_CONT 関数を使用するのが一般的です。データが離散的に分布している場合は、PERCENTILE_DISC 関数を使用する必要があります。
上記の2つの関数以外にも、中央値を計算する方法があります。
- ウィンドウ関数を使用する
- サブクエリを使用する
これらの方法は、より複雑な場合に役立ちます。
CREATE TABLE 従業員 (
名前 VARCHAR(50),
年齢 INT
);
INSERT INTO 従業員 (名前, 年齢) VALUES ('山田太郎', 20);
INSERT INTO 従業員 (名前, 年齢) VALUES ('佐藤花子', 25);
INSERT INTO 従業員 (名前, 年齢) VALUES ('田中一郎', 30);
INSERT INTO 従業員 (名前, 年齢) VALUES ('斎藤美咲', 35);
SELECT 名前, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 年齢) AS 中央値
FROM 従業員;
結果
名前 | 中央値
------- | --------
山田太郎 | 25
佐藤花子 | 25
田中一郎 | 30
斎藤美咲 | 30
SELECT 名前, PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY 年齢) AS 中央値
FROM 従業員;
名前 | 中央値
------- | --------
山田太郎 | 25
佐藤花子 | 25
田中一郎 | 30
斎藤美咲 | 30
このサンプルコードでは、従業員テーブルの年齢列の中央値を PERCENTILE_CONT 関数と PERCENTILE_DISC 関数を使用して計算しています。
SELECT 名前, AVG(年齢) OVER (ORDER BY 年齢 ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS 中央値
FROM 従業員;
SELECT 名前, (
SELECT AVG(年齢)
FROM 従業員 AS t
WHERE t.年齢 >= 従業員.年齢 AND t.年齢 <= 従業員.年齢 + 1
) AS 中央値
FROM 従業員;
SQL Server で中央値を計算するその他の方法
ウィンドウ関数を使用すると、各行に対して中央値を計算することができます。
SELECT 名前, AVG(年齢) OVER (ORDER BY 年齢 ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS 中央値
FROM 従業員;
サブクエリを使用すると、中央値を計算するための複雑な式を作成することができます。
SELECT 名前, (
SELECT AVG(年齢)
FROM 従業員 AS t
WHERE t.年齢 >= 従業員.年齢 AND t.年齢 <= 従業員.年齢 + 1
) AS 中央値
FROM 従業員;
RANK 関数と COUNT 関数を使用して、中央値を計算することができます。
SELECT 名前, RANK() OVER (ORDER BY 年齢) AS 順位, COUNT(*) OVER () AS 総数
FROM 従業員;
T-SQL の呪文を使用して、中央値を計算することができます。
SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY 年齢)
FROM 従業員;
使用する方法は、データの量と複雑さに依存します。
- データ量が少なく、計算が単純な場合は、ウィンドウ関数またはサブクエリを使用するのが一般的です。
- データ量が多く、計算が複雑な場合は、RANK 関数と COUNT 関数または T-SQL の呪文を使用するのが一般的です。
sql-server t-sql aggregate-functions