サンプルコード:PERCENTILE_CONT 関数と PERCENTILE_DISC 関数

2024-04-02

SQL Server で中央値を計算する関数

  1. 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


CASE式 vs BITWISE NOT演算子:ビット反転の最適な方法は?

方法 1: BITWISE NOT 演算子例:利点:シンプルで分かりやすいすべてのバージョンで利用可能ビット位置を指定できない列全体を反転するため、パフォーマンスが低下する場合がある方法 2: CASE 式特定の条件に基づいてビットを反転できる...


Transact-SQL エディターでスクリプトファイルを実行する

方法Transact-SQL エディターを使用して、スクリプトファイルを直接実行できます。これは、小さなスクリプトファイルや、テスト目的でスクリプトファイルを実行する場合に便利です。 利点 簡単で直感的 テスト目的でスクリプトを実行する場合に便利 欠点 大規模なスクリプトファイルの場合、実行に時間がかかる エラーが発生した場合、原因特定が難しい...


SQL Server初心者でも安心!大容量 .sqlファイルのインポート手順

方法 1:SQL Server Management Studio (SSMS) を使用するSSMS は、Microsoft が提供する無料のツールです。SSMS を使用して . sql ファイルをインポートするには、次の手順に従います。SSMS を起動し、SQL Server インスタンスに接続します。...


DATETIME_FROM_PARTS関数で時間のみのDateTime型を作成する

SQL ServerのDateTime型は、日付と時刻を組み合わせて表現するデータ型です。このデータ型から時間のみを取得するには、いくつかの方法があります。方法DATEPART関数DATEPART関数は、DateTime型から指定された日付要素を取得する関数です。時間のみを取得するには、HOUR、MINUTE、SECONDのいずれかの要素を指定します。...


ALTER SCHEMA ステートメントを使用してテーブルのスキーマ名を変更する

方法 1: ALTER SCHEMA ステートメントを使用するこれは、テーブルのスキーマ名を変更する最も一般的な方法です。以下の構文を使用します。例:この例では、Customers テーブルのスキーマ名を dbo から Sales に変更します。...