【MySQL】ユーザ定義変数を使ってランキング情報を集計する
-
カテゴリ:
- DB
-
タグ:
- #MySQL
前回の「【MySQL】ユーザ定義変数を使ったSQL」の記事から派生して、今度はMySQLのユーザ定義変数を使ってランキング情報を集計するSQLのサンプルをご紹介します。
ランキング集計SQL
SELECT
ranking.rank
, ranking.営業担当者 AS "営業担当者"
, ranking.contract_count AS "契約数"
FROM
(SELECT
@p := @a
, CASE
WHEN @p = main.contract_count THEN @c
ELSE @c := @c + @s
END AS rank
, CASE
WHEN @p = main.contract_count THEN @s := @s + 1
ELSE @s := 1
END AS S
, main.営業担当者
, @a := main.contract_count
FROM
(SELECT @c := 1, @a := null, @s := 0) AS dummy
,(SELECT
COUNT(contract.id) AS contract_count
, contract.営業担当者
FROM
[契約情報] contract
WHERE
[契約日] >= 月初日
AND [契約日] <= 月末日
<…条件モロモロ>
GROUP BY
contract.営業担当者
) main
ORDER BY main.contract_count desc
) ranking
WHERE ranking.rank <= 300
ORDER BY rank
;
結果イメージ
+----------+-----------+-----------+
| rank | 営業担当者 | 契約数 |
+----------+-----------+-----------+
| 1 | ichiro | 10 |
+----------+-----------+-----------+
| 2 | jiro | 8 |
+----------+-----------+-----------+
| 3 | taro | 5 |
+----------+-----------+-----------+
| 3 | hanako | 5 |
+----------+-----------+-----------+
| 4 | tom | 1 |
+----------+-----------+-----------+
以上です。
投稿日:2020-03-06
更新日:2020-03-06