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

mysql:15792

From: <gotou1213@xxxxxxxxxx>
Date: Thu, 12 Jul 2012 00:40:45 +0900
Subject: [mysql 15792] Re: カテゴリ毎の上位3件

後藤です。

> 後藤さんのやり方にはひとつ問題がありまして、3件以上のレコードがないカテゴリの
> 抽出ができません。

なるほど、それもそうでした・・・

> 中川さんからのご指摘のように3件無いcategoryは <= が成り立たなくなるので、
> (select count(*) from saledata where category = t.category) < 3 or
> という条件も付ければよさそうですね。

or で相関サブクエリを繋げるよりも、limit 2.1 で結果がない場合は
そのカテゴリのデータは 3 件未満 = そのカテゴリのデータは全部
という事なので、次のように IFNULL の方が saledata の走査回数が減って
お得だと思われます。

select category, name, price from saledata AS t
 where price <= IFNULL((
  select price from saledata where category = t.category
  order by category asc, price asc limit 2,1
 ), price)
 order by category asc, price asc
;

以上です。

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

     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> ]