SQLで売上構成比・割合・比率を求めたい場面はよくあります。
そんなときに便利なのが RATIO_TO_REPORT 関数です。
この記事では、
-
RATIO_TO_REPORTとは何か -
基本的な使い方
-
よくある使用例(売上構成比)
-
注意点・代替手段
をわかりやすく解説します。
目次
RATIO_TO_REPORT とは?
RATIO_TO_REPORT は Oracle SQL の分析関数で、
全体に対する各行の割合(構成比) を簡単に計算できます。
-
合計値に対する比率を 自動計算
-
割り算やサブクエリが不要
-
集計ミスが起きにくい
というメリットがあります。
基本構文
👉 OVER () を指定すると 全行合計に対する割合 になります。
使用例:売上の構成比を出す
サンプルデータ
| 商品 | 売上 |
|---|---|
| A | 100 |
| B | 300 |
| C | 600 |
SQL
実行結果イメージ
| 商品 | 売上 | 構成比 |
|---|---|---|
| A | 100 | 0.1 |
| B | 300 | 0.3 |
| C | 600 | 0.6 |
👉 合計1000に対する割合が自動で計算されています。
パーセンテージ表示にする
そのままだと小数なので、%表示にしたい場合は以下のようにします。
結果例:
| 商品 | 売上 | 構成比(%) |
|---|---|---|
| A | 100 | 10.00 |
| B | 300 | 30.00 |
| C | 600 | 60.00 |
グループごとの構成比(PARTITION BY)
カテゴリ別の構成比を出したい場合は PARTITION BY を使います。
👉 カテゴリ内合計に対する割合になります。
RATIO_TO_REPORT を使うメリット
| 項目 | 内容 |
|---|---|
| 可読性 | 構成比と一目で分かる |
| 安全性 | 合計値の計算ミスを防げる |
| シンプル | サブクエリ不要 |
注意点
-
Oracle専用関数(MySQL / PostgreSQL では使えない)
-
合計が
0の場合は結果も0になる -
分析関数のため
GROUP BYと併用時は注意
他DBでの代替方法
Oracle以外では以下のように書きます。
ただし、
-
可読性が落ちる
-
SUMの書き忘れミスが起きやすい
という欠点があります。
まとめ
-
構成比を出したいなら
RATIO_TO_REPORT -
割合計算をシンプル&安全に書ける
-
売上分析・比率集計で非常に便利
👉 Oracle SQL を使っているなら 積極的に使うべき分析関数です。



