2016-07-25 18 views
0

2つのテーブルがあると、[Purchase]テーブルから上位3つの値を生成します。 追加の基準は、[Crocs]がレコードの上位3桁に含まれている必要があります。MySQLに注文がある特定の行が含まれています

私は以下のSQLを持っていますが、私が望むように結果を生成することはできません(結果A)。結果Bを結果として引き出す方法を教えてください。ありがとう。

表(購入):

Purchase_ID | StoreID | Amount 
------------|---------|-------- 
    1   | 21  | 22 
    2   | 23  | 13 
    3   | 25  | 6 
    4   | 26  | 23 
    5   | 28  | 18 

表(ストア):

Store_ID | StoreName  
---------|---------- 
    21  | Adidas 
    22  | Nike 
    23  | Puma 
    24  | New Balance 
    25  | Crocs 
    26  | Converse 

SQL:

SELECT IF(SUM(amount) IS NULL, 0, SUM(amount)) as totalAmount 
FROM (
    SELECT a.amount 
    FROM purchase a 
    INNER JOIN store b 
    ON a.store_id = b.storeid 
    GROUP BY a.amount 
    HAVING b.StoreName = 'Crocs' 
    ORDER BY a.amount DESC 
    LIMIT 3 
) t 

結果A:$ 6

説明A:量悪臭は$ 6です

結果B:$ 51

説明B:トップ3 = $図22(アディダス)+ 23(プーマ)+ $ 6の(クロックス)の合計量

+0

なぜ結果Bが51ですか? – Blank

+0

あなたはbのカテゴリを持っていますが、フィールドはありません。 –

答えて

0

scaisEdgeからの答えは、ほぼ右ですが、最初のクエリにもワニを持つ行を返すことができますソートが間違っています(max(a.amount)によるリミット2は、最も低い2つの結果が表示されることを意味します)。さらに、別の選択クエリでクエリをラップして結果を並べ替えることができます。

SELECT * FROM (
    SELECT b.storename, max(a.amount) as maxAmount 
     FROM purchase a 
     INNER JOIN store b ON a.store_id = b.storeid 
     WHERE b.storename != 'crocks' 
     GROUP BY a.storename 
     ORDER BY max(a.amount) DESC 
     LIMIT 2 
    UNION 
     SELECT b.storename, a.amount as maxAmount 
     FROM purchase a 
     INNER JOIN store b 
     ON a.store_id = b.storeid 
     WHERE b.storename='crocks' 
     ORDER BY a.amount DESC 
     LIMIT 1 
) ORDER BY maxAmount DESC 
+0

あなたの提案をありがとう –

0

あなたは労働組合を使用することができます

SELECT b.storename, max(a.amount) 
    FROM purchase a 
    INNER JOIN store b 
    ON a.store_id = b.storeid 
    GROUP BY a.storename 
    order by max(a.amount) limit 2 
    union 
    SELECT b.storename, a.amount 
    FROM purchase a 
    INNER JOIN store b 
    ON a.store_id = b.storeid 
    where b.storename='crocks' 
0

これを試してみてください:

SELECT sum(amount)as sum_amount,a.store_id,storename,category from 
(select amount,store_id from tbl_purchase) as a 

inner JOIN 

(select store_id,storename,category from tbl_store)as b on a.store_id = b.store_id where b.category = 'supermarket' GROUP BY category 
関連する問題