2017-08-14 18 views
0

私が抱えている問題の例を教えてください。たとえば、すべての注文と購入を挿入するテーブルorderがあります。ベストセル製品の製品ランクを取得するMySQL

表A(ordersは):

+--------------------------+ 
| CustomerKey | ProductKey | 
+--------------------------+ 
| 306545  | pro1  | 
| 597864  | pro3  | 
| 784678  | pro2  | 
| 905479  | pro3  | 
| 306545  | pro1  | 
| 348965  | pro3  | 
| 784678  | pro3  | 
+--------------------------+ 

今私は注文し、私たちの最も売れている製品を取得し、例えば最も売れている製品のリストにPRO3ランクを取得したいと思います。

クエリ出力:

+-------------------------------+ 
| id | ProductKey | numberSold | 
+-------------------------------+ 
| 1 | pro3  | 4   | 
| 2 | pro1  | 2   | 
| 3 | pro2  | 1   | 
+-------------------------------+  

私はこのクエリを書いた:

select ProductKey, 
count(1) as numberSold 
from A group 
by ProductKey 
order by count(1) desc 

結果は私のために有用ではありません。例えば、私はベストセラーの製品にランクpro27を取得する必要があります(当社10万の製品を持っている!)

+-------------------------------------+ 
| id | ProductKey | numberSold | rank | 
+-------------------------------------| 
| 1 | pro3  | 4   | 1 | 
| 2 | pro1  | 2   | 2 | 
| 3 | pro2  | 1   | 3 | 
+------------------------------+------+ 
+0

お待ちください。「SELECT ProductKey FROM A ORDER BY numberSold DESC LIMIT 1'」とは何ですか?あなたはクエリで最高の売り手を得ます。 – GrumpyCrouton

+0

参照:[私は非常に単純なSQLクエリと思われるものに対してMCVEを提供するのはなぜですか?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve非常にシンプルなSQLクエリのようなものです) – Strawberry

答えて

1

は、あなたがこの問題を解決するために派生テーブルを使用することができます。とにかく質問は遅くなりますが、望む結果が得られます。

SET @rank = 0; 

SELECT * 
FROM 
(
    select (@rank := @rank + 1) AS Rank, 
    ProductKey, 
    count(1) as numberSold 
    from A 
    group by ProductKey 
    order by count(1) desc 
) dt 
WHERE dt.ProductKey = 'prod27'; 
関連する問題