2016-10-06 5 views
1

これは基本的な質問です。SQLカウントの問題

私は私のデータセットが約10万レコードを持っている

store-ProdCode 
13p  I10x 
13p  I20x 
13p  I30x 
14a  K38z  
17a  K38y  

テーブルを持っています。

私がしようとしているのは、すべての店舗でトップ10のprodCodeが見つかるからです。

私はこれを行う方法がわからないだけど、私が試したことだった。

select s_code as store, prod_code,count (prod_code) 
from top10_secondary 
where prod_code is not null 
group by store,prod_code 
order by count(prod_code) desc limit 10 

これは私に完全に異なる何かを与えていると私は私が私の最終的な結果を達成することについて行く方法についてはわかりませんよ。

予想される出力は次のようになります。すべてのヘルプは高く評価され

store--prodcode--result 
1a  abc  5 
1a  abd  4 
1a  xxx  7 
--- this will be done until top 10 prodcodes for 1a are done-- 
2a  dgf  1 
2a  ldk  6 
--process completes until end of data is reached and top 10 prodcodes are displayed for each store 

:すべてのストア(s_code)のために(カウントして算出上位10)上位10 prodcodeので

を表示します。これを行う最善の方法は何ですか?あなたは集計クエリで直接ウィンドウ関数を使用することができます

select s.* 
from (select s_code as store, prod_code, count(prod_code), 
      row_number() over (partition by s_code order by count(prod_code) desc) as seqnum 
     from top10_secondary 
     where prod_code is not null 
     group by s_code, prod_code 
    ) s 
where seqnum <= 10; 

おかげ

+0

これは集約クエリであるため、「重複した」とは言えません。 –

+0

リンクに感謝しますが、私の質問が、少し違うものを求めているように、私の質問がどのように関連しているのか分かりません。私のことを最初に数える必要があります。 – timz

答えて

1

は一つの方法は、このような何かをrow_number()を使用しています。サブクエリは、フィルタリングのシーケンス番号を参照するためにのみ必要です。

+0

多くのありがとう。実行しようとするとストアが存在しないと言われます。エラー:列 "ストア"が存在しません。 これは明確に指定されています。何かが見つからない場合 – timz

+0

改めてありがとうございました。とにかくseqnumを結果から削除することができますか? – timz

+0

@ティムズ。 。 。 't。* 'の代わりに列を列挙するだけです。すべての列を列挙することは気を散らすことができるので、私は実際の生活の中で答えよりもはるかに頻繁に '*'を使用します。 –