• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ランキング)

MySQLでランキングの付け方を教えていただきたい

このQ&Aのポイント
  • MySQLを使用してテーブルのデータにランキングを付ける方法について教えてください。
  • テーブルにはItemCdとCountの列があり、Count列を基準にランキングを作成したいです。
  • さらに、既に該当のランクが存在する場合、同じランクを付けたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.5

こんな感じかな? select r.*, if(n.Count is null, 0, count(*)) + 1 as Rank from tableA r left join tableA n on (r.type=n.type) and (r.Count < n.Count) where r.type='A' group by r.ItemCd order by a.Count desc;

その他の回答 (5)

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.6

また間違えました 誤: order by a.Count desc; 正: order by r.Count desc; これでできました。 r.Count < n.Count で結合した時に、NULLも1レコードとしてcountされるので、ランクキングが変だったので、NULLの場合には0にすれば、ちゃんとランクづけできました。

wonder_dct
質問者

お礼

TagoSuck 様 ご回答ありがとうございます。 思っていた通りの結果が取得できました。 ありがとうございました。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.4

初めの質問では、ランキングの1位が2つあっても、次のランキングは2位になっていますが、お礼での補足説明は1位が2つで、次のランキングは3位になっていますが、どちらでしょうか? やってみたところ、 ItemCd | Count | type | Rank 1007 | 3 | A | 1 1010 | 3 | A | 1 1001 | 1 | A | 2 1005 | 1 | A | 2 か ItemCd | Count | type | Rank 1007 | 3 | A | 1 1010 | 3 | A | 1 1001 | 1 | A | 4 1005 | 1 | A | 4 ならできたんですけど...。 私のスキルでは...。

wonder_dct
質問者

補足

TagoSuck 様 ご回答ありがとうございます。 紛らわしくなってしまって申し訳ございません。 ItemCd | Count | type | Rank 1007 | 3 | A | 1 1010 | 3 | A | 1 1001 | 1 | A | 3 1005 | 1 | A | 3 としたいと思っております。 もし次のレコードがあったら、「Rank=5」になります。 よろしくお願いいたします。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.3

#1です 間違いだらけでごめんなさい。 誤: group by r.id, r.count 正: group by r.ItemCd, r.count id ではなく、ItemCdですね。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.2

#1です ごめんなさい。 誤: order by a.count desc 正: order by r.count desc a ではなく、 r ですね。

  • TagoSuck
  • ベストアンサー率72% (16/22)
回答No.1

私の環境ではこうなりました。 select r.*, count(*) + 1 - 1 as Rank from tableA r left outer join tableA n on(r.count < n.count) group by r.id, r.count order by a.count desc; でご希望の結果を得られました。 mysql: 5.2.1

wonder_dct
質問者

補足

TagoSuck 様 ご回答ありがとうございます。 説明が不足しておりました。 where句をつけた場合意図した結果を得ることができません。 以下のようなテーブルがあります。 ItemCd | Count | type 1001 | 1 | A 1003 | 2 | B 1005 | 1 | A 1007 | 3 | A 1009 | 3 | B 1010 | 3 | A where type='A' と付けたとき、以下のようにデータの取得をしたいと思います。 ItemCd | Count | type | Rank 1007 | 3 | A | 1 1010 | 3 | A | 1 1001 | 1 | A | 3 1005 | 1 | A | 3 説明不足で申し訳ございません。 ご教授お願いいたします。

関連するQ&A