MySQLで対象期間を決め集計しランキングする方法
MySQLの初心者ですが、対象期間で集計を行いランキング付けし任意の上位何位までを抽出する方法について教えてください。
全データから集計後上位5位を選ぶ場合・・同順有り
select x.`品名`,x.kei,(select count(*)+1 from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) y where x.kei<y.kei ) as rank
from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) x
having rank <= 5
order by rank
といろいろ参考にしてで出来ましたが。任意の対象期間(日付)を設定して実行するSQL文が思いつきません。どこに期間を挿入するのか・・・悪あがきで思い付いた方法として
CREATE OR REPLACE VIEW uriage_01 AS
SELECT `品名`,SUM(`金額`) AS `金額` FROM uriage WHERE `日付` BETWEEN "2001/01/01" AND "2001/01/31" GROUP BY `品名`
で任意期間の集計結果のビューを作りそのビューから
select r1.`品名` as `品名`, r1.`金額` as p, count(r2.`金額`)+1 as rank
from uriage_01 as r1 left join uriage_01 as r2
on r1.`金額` < r2.`金額`
group by r1.`品名`
having rank <= 5
order by rank
と手間の掛かる方法です。単純に5行だけに限定ならorder by `金額`Limit 5 にすれば良いだけですけど・・・同順があるとどうすれば良いのかと思考停止状態です。尚、当方は、MySQLの勉強を始めたばかりにですので宜しくお願いいたします
お礼
関連記事ありがとうございます。そういう仕組みなんですか・・・。 最近ものすごく流行ってるジャニーズ系、バラエティ発系の良さが分かんないんで(嵐以外。まあ、最近のEXILEとか西野カナとかの良さも理解できませんが。10代前半なんですけどね。) ご回答ありがとうございました!