2016-06-19 14 views
4

特定の日に合計売上を見つけるためにmysqlクエリを作成する必要があります。私はそれを見つけることができますが、組み合わせた結果を表示することはできません。出力の組み合わせを表示するMySQLクエリ

の表は、次のようになります。

Date, Order_id, Product_id, Quantity 
'01-JUL-11',O1,P1,5 
'01-JUL-11',O2,P2,2 
'01-JUL-11',O3,P3,10 
'01-JUL-11',O4,P1,10 
'02-JUL-11',O5,P3,5 
'02-JUL-11',O6,P4,6 
'02-JUL-11',O7,P1,2 
'02-JUL-11',O8,P5,1 
'02-JUL-11',O9,P6,2 
'02-JUL-11',O10,P2,4 

所望の出力:

Product_id Total Sales on Day '02-JUL-11' Total Sales on Day '02-JUL-11' 
P1 15 2 
P2 2 4 
P3 10 5 
P4 0 6 
P5 0 1 
P6 0 2 

私は何をしようとしたことは次のとおりです。

Select distinct product_id 
from orders; 

出力:

P1 
P2 
P3 
P4 
P5 
P6 

Select product_id, sum(quantity) from orders 
where order_day = '11-07-01' 
group by product_id 

OUTPUT:

P1 15 
P2 2 
P3 10 


Select product_id, sum(quantity) from orders 
where order_day = '11-07-02' 
group by product_id 

OUTPUT:

P1 2 
P2 4 
P3 5 
P4 6 
P5 1 
P6 2 

これは私に望ましい結果を与えるが、私は何とか列を結合したいです。私のために働いた

問合せ:あなたのレポートにまとめた唯一の二日間は、単純な(非ダイナミック)ピボットクエリはトリックを行う必要があります必要がある場合は

Select X.product_id, X.s, Y.t from 
(SELECT A.product_id as product_id, B.s as s FROM 
(Select distinct product_id 
from orders) A 
LEFT JOIN 
(Select product_id, sum(quantity) as s from orders 
where order_day = '11-07-01' 
group by product_id) B 
ON A.product_id = B.product_id) X 
Left join 
(Select product_id, sum(quantity) as t from orders 
where order_day = '11-07-02' 
group by product_id) Y 
on X.product_id = Y.product_id; 
+0

あなたのサンプル入力と出力が」doesnのあなたは単純なピボットクエリーで逃げることができるかもしれません。 –

答えて

2

(ただし0にnullを置く):

SELECT product_id, 
    SUM(CASE WHEN order_day = '11-07-01' THEN quantity ELSE 0 END) AS `Total Sales on Day '01-JUL-11'`, 
    SUM(CASE WHEN order_day = '11-07-02' THEN quantity ELSE 0 END) AS `Total Sales on Day '02-JUL-11'` 
FROM orders 
WHERE order_day = '11-07-01' OR order_day = '11-07-02' 
GROUP BY product_id 
+0

このサブクエリについて説明できますか?SUM(CASE WHEN order_day = '11 -07-01 'THEN quantity ELSE 0 END) – Raj

+1

@Parinこれは特定の日に_only_の量を合計します。そうでなければ0になります。副選択のすべてのレコードに適用されます。 –

+0

ありがとうございましたが、私はあなたがこのクエリについてどのようになったのか知りたかったのです。 この構文について知っていれば、おそらく私はこのコードを書いている可能性があります。私はすぐにアマゾンとのインタビューをしています、あなたはそのような知識で私を豊かにするいくつかの学習教材を提案できますか? (私はhackkerrankとleetcodeを解決しました) – Raj

1

条件付き集計が行われます。しかし、適切な日付形式を使用する方法を学ぶ必要があります。 ISO/ANSI規格では、YYYY-MM-DDまたはYYYYMMDDです:

Select product_id, 
     sum(case when order_day = '2011-07-01' then quantity else 0 end) as q_20110701,  
     sum(case when order_day = '2011-07-02' then quantity else 0 end) as q_20110702 
from orders o 
where order_day in ('2011-07-01', '2011-07-02') 
group by product_id; 

代わり、あなたは日ごとに別々の行と一緒に暮らすことができる場合は、次のとおりです。

Select product_id, order_day, sum(quantity) 
from orders 
where order_day in ('2011-07-01', '2011-07-02') 
group by product_id, order_day, 
+0

合計(order_day = '2011-07-01'、次に数量else 0 end) これを説明できますか? – Raj

+0

条件付き集計です。日付が指定された日付のときはいつでも 'quantity'を加算します。 –

関連する問題