【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

[スポンサーリンク]

[スポンサーリンク]

  
関連記事
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
勉強した内容を緩くメモする|JBの技術メモ
サイト内検索
プロフィール

プロフィール

[Name : POCO(@PocoIt2019)]
都内で社内SEをしているおじさん。
仕事で得られる知識だけでは限界を感じ、 WEBの勉強がてらITブログを開始。
サーバからWEBサイトまでフルスクラッチで開発しました。
現在は勉強のモチベーションを保つために活用中。
興味があることを雑記的に書いていきます。

[スポンサーリンク]

カテゴリ


タグ

[スポンサーリンク]

最近の記事