2012年7月12日

[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
;

以上です。


投稿者 xml-rpc : 2012年7月12日 00:40
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/111248
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。