[前][次][番号順一覧][スレッド一覧]

mysql:15791

From: あきら <あきら <akirainfoml@xxxxxxxxxx>>
Date: Wed, 11 Jul 2012 17:11:56 +0900
Subject: [mysql 15791] Re: カテゴリ毎の上位3件

あきらです

> 速度は心配ですが、メンテナンス時の可読性を考えると、こちらの
> ほうがシンプルで良さそうですね。

件数によりますが、速度心配ですね
予め順位のカラムを追加するバージョンを考えてみました
個人的にはカテゴリ別にSQLをプログラムから投げるほうが好ましい気がしますが、、、

-- テーブル定義
CREATE TABLE IF NOT EXISTS xxx2 (
  id int,
  nen int,
  gaku int,
  rank int
);

-- データ準備
INSERT INTO xxx2 (id, nen, gaku, rank) VALUES
(1, 2011, 600, 999),
(2, 2011, 500, 999),
(3, 2011, 450, 999),
(4, 2011, 750, 999),
(5, 2010, 450, 999),
(6, 2010, 600, 999),
(7, 2010, 350, 999),
(8, 2010, 800, 999),
(9, 2010, 600, 999);

-- 順位更新
UPDATE xxx2 t
set
  rank = ( -- 自分より値段が低いものカウント
    select
      count(*)
    from
      (select * from xxx2) as t2
    where
      t2.nen = t.nen
      and t2.gaku < t.gaku
  ) + ( -- 同じ値段のものはIDが小さいほうが上位
    select
      count(*)
    from
      (select * from xxx2) as t2
    where
      t2.nen = t.nen
      and t2.gaku = t.gaku
      and t2.id < t.id
  ) + 1

-- データ取得
select
  *
from
  xxx2
where
  rank <= 3
order by
  nen
  , rank

-- 実行結果
7 2010 350 1
5 2010 450 2
6 2010 600 3
3 2011 450 1
2 2011 500 2
1 2011 600 3

あきら

[前][次][番号順一覧][スレッド一覧]

     15783 2012-07-11 02:56 [<shin-1@xxxxxxxxxx> ] カテゴリ毎の上位3件                     
     15784 2012-07-11 10:27 ┣[高橋政利 <takahashi@]                                       
     15785 2012-07-11 12:28 ┣[中川 貴 <takashi.nak]                                       
     15796 2012-07-12 04:10 ┃┗[<shin-1@xxxxxxxxxx> ]                                     
     15786 2012-07-11 13:49 ┗[<gotou1213@xxxxxxxxx]                                       
     15787 2012-07-11 14:17  ┣[<gotou1213@xxxxxxxxx]                                     
     15788 2012-07-11 15:00  ┃┗[中川 貴 <takashi.nak]                                   
     15790 2012-07-11 16:09  ┗[<shin-1@xxxxxxxxxx> ]                                     
->   15791 2012-07-11 17:11   ┣[あきら <akirainfoml@]                                   
     15794 2012-07-12 03:38   ┃┗[<shin-1@xxxxxxxxxx> ]                                 
     15792 2012-07-12 00:40   ┗[<gotou1213@xxxxxxxxx]                                   
     15795 2012-07-12 03:42    ┗[<shin-1@xxxxxxxxxx> ]