スポンサーリンク

【SQL】度数分布を作成する方法

記事内に広告が含まれています。

SQLで度数分布を作成するには、数値データを範囲(ビン)ごとに分けて集計します。

スポンサーリンク

CASE式を利用した度数分布の作成

基本的な手順は次の通りです。

SalesテーブルのAmount列で度数分布を作成する例です。

SELECT 
    CASE 
        WHEN Amount < 100 THEN '0-99'
        WHEN Amount >= 100 AND Amount < 200 THEN '100-199'
        WHEN Amount >= 200 AND Amount < 300 THEN '200-299'
        ELSE '300以上'
    END AS Amount_Range,
    COUNT(*) AS Frequency
FROM Sales
GROUP BY 
    CASE 
        WHEN Amount < 100 THEN '0-99'
        WHEN Amount >= 100 AND Amount < 200 THEN '100-199'
        WHEN Amount >= 200 AND Amount < 300 THEN '200-299'
        ELSE '300以上'
    END
ORDER BY Amount_Range;

このクエリでは、CASE文を使ってAmountの範囲ごとにグループ化し、COUNT(*)で各範囲の件数(頻度)をカウントします。

スポンサーリンク

等間隔のビンを利用した度数分布の作成

数値範囲を自動的に計算する場合、特定の幅(ビン幅)で分割できます。

SELECT 
    FLOOR(Amount / 100) * 100 AS Amount_Range_Start,
    FLOOR(Amount / 100) * 100 + 99 AS Amount_Range_End,
    COUNT(*) AS Frequency
FROM Sales
GROUP BY 
    FLOOR(Amount / 100)
ORDER BY 
    Amount_Range_Start;

このクエリでは、FLOOR(Amount / 100) * 100によって100ごとの範囲に分割し、その範囲の件数をカウントしています。

Amount_Range_StartAmount_Range_Endを使って範囲の表示も行います。

ビンの範囲を事前に定義したテーブルを使用する方法

度数分布の範囲を柔軟に定義するために、ビンの範囲を格納したテーブルを作成することもできます。

-- Binテーブルの作成
CREATE TABLE Bins (
    Bin_Start INT,
    Bin_End INT
);

-- Binテーブルのデータ挿入
INSERT INTO Bins (Bin_Start, Bin_End) VALUES
(0, 99), (100, 199), (200, 299), (300, 399);

-- 度数分布の作成
SELECT 
    CONCAT(Bin_Start, '-', Bin_End) AS Amount_Range,
    COUNT(Sales.Amount) AS Frequency
FROM 
    Bins
LEFT JOIN 
    Sales ON Sales.Amount BETWEEN Bins.Bin_Start AND Bins.Bin_End
GROUP BY 
    Bin_Start, Bin_End
ORDER BY 
    Bin_Start;

この方法では、範囲を定義するビンテーブルを使用して度数分布を作成できます。

上記の方法で、SQLを使って度数分布を効率的に作成できます。

スポンサーリンク
SQL
著者SNS
タイトルとURLをコピーしました