元エンジニアPMのプロダクトマネージャーお役立ち情報

プロダクトとビジネスの両輪どっちも回してる人 事業戦略やプロダクトマネジメントに関する情報を発信

【SQL】平均値・中央値や上位25%や75%の四分位数を抽出しよう

データの平均値や中央値を把握するは分析の基本

データ分析で最も多い依頼は、データの平均や中央値・頻出値、データの偏りがどれくらいあるかの把握です。
ユーザー別の売上平均や中央値、上位75%や25%がどれくらいなのかの四分位数(しぶんいすう)や、最も頻出している値はどれなのか?こういった「データの把握」が最も分析依頼としてよくあるパターンになります。
事業戦略や、事業企画、知的労働に携わる人の全てにおすすめできる名著”ISSUEからはじめよ”でも、基本的な分析は構成・比較・変化のどれかしかないとも言われており、あるデータとデータの平均値・中央値などの構成や、競合サービスとの比較、また平均値・中央値・四分位数が変化したのか?など様々な切り口で分析することができます。

どんな分析からはじめれば良いか分からない方は、データの平均値・中央値を抽出し、同じ条件で比較してみたり、年月単位の変化を見てみたり、構成の差を調べてみたりするとよいのではないでしょうか。

SQLで平均値・中央値を出す方法

今回はPrestoを使い平均値、中央値、四分位数のクエリの書き方を紹介していきます。

平均値の出し方

平均を出すためには対象のカラムに対してavg()関数を使うことで計算することができます。これは他のSQL言語でも同じパターンが多いため覚えやすいですね。

select avg(column) from table

中央値の出し方

中央値は一般的にはmedian関数を利用することが多いですが、Prestoではapprox_percentile関数を利用します。

select approx_percentile(column, 0.5) as median from table

approx_percentileは、指定されたパーセンテージにおけるおおよそのパーセンタイルを返す関数です。パーセンテージの値は0から1の間で指定することができ、0.5はちょうど真ん中にあたるので中央値になります。これを使って approx_percentile(column, 0.25)で第一四分位数、approx_percentile(column, 0.75)で第三四分位数を表すことができます。

ちなみに四分位数とは、データを小さい順に並べて4等分したときの区切り値のことです。データの最小値から最大値までの範囲を4分割したと思えば分かりやすいです。上位25%がどれくらいの数字なのかや、上位75%がどれくらいなのかを四分位数を使うことで適切に把握できます。

平均値や中央値を使って、データを比較する

クエリの書き方が分かったところで、具体的にどのような分析をすべきなのか?を紹介していきます。先程構成・比較・変化のどれかのパターンで分析ができると書きましたので、例として性別・年代別の売上を比較するデータを考えてみましょう。

一例で購入金額と性別・年代が入っているテーブルを想定してみました。Chat GPTでサンプルデータを作成していますので、実際のデータとは異なります。

購入金額 性別 年代
11039 30代
18141 20代
19461 20代
18383 20代
24514 30代
7892 20代
9050 20代
19474 40代
22423 30代
8931 20代
12915 20代
24641 30代
15655 30代
25204 40代
21763 30代
25263 40代
13399 20代
29233 30代
26186 20代
14381 20代

これらをavg()関数とapprox_percentile()関数を使って平均値と中央値を性別・年代ごとに出してみます。

性別 年代 平均値 中央値
20代 16138.2 18141.0
30代 21794.4 22423.0
40代 19474.0 19474.0
20代 13609.6 13399.0
30代 20148.0 20148.0
40代 25233.5 25233.5

このように対象を比較することで、どのような特徴があるのかがわかりやすくなります。例えば男女で40代の購入金額に差があり、男性の方が購入金額が大きいことなどが分かります。
平均値や中央値を出すときは、同一条件で他のものと比較することでそのデータがどういう意味を持つのか?がわかるので、比較してみましょう。

ぜひ平均値や中央値、四分位数の出し方を覚えて分析に活用してみてくださいね。