2014-02-19 37 views
1

我的表是:過濾數據

customer(cid,name,city,state) 
orders(oid,cid,date) 
product(pid,productname,price) 
lineitem(lid,pid,oid,number,totalprice) 

我想創建一個視圖ProductMonth (PID, ProductName, Month, QuantitySold, NumberCus­tomer, Revenue),讓每一個產品和每一個月份,銷售的數量, 數不同的顧客誰買了產品和金額銷售 對應的月份。我使用extract()orders.date獲得月份。我需要知道如何循環每個月和每個產品。我無法想出一個工作查詢。它甚至有可能在MySQL中做到這一點?我的意思是循環每個月的產品名稱並計算總價格以及每個產品銷售對整體產生的貢獻。我知道如何針對特定產品或月份實施此項目,但不知道每個月銷售的產品。我嘗試使用連接,但它失敗。我需要查詢以及實現它的邏輯。

+0

這當然是可能的,但循環是不必要的。儘管包括MySQL在內的很多SQL語言都有循環,但語言(SQL)從來沒有關於循環,而是關於整個集合(子集)的工作。如果我們以自己的嘗試爲出發點來嘗試並幫助你掌握思維,那麼這可能會更容易(也可能更有利於你)。請顯示可以計算單個產品/月份對的總計的查詢。如果你還添加了一個數據樣本來處理,那將會非常好。 –

回答

1

這裏假定lineitem.number是銷售單位的數量。

SELECT P.pid 
,p.productname 
,Month=datepart(mm, O.date) 
,QuantitySold = sum(L.number) 
,NumberCustomer = count(distinct cid) 
,Revenue = sum(L.totalprice) 
FROM orders O 
JOIN customer C on C.cid = O.cid 
JOIN lineitem L on L.oid = O.oid 
JOIN product P on P.pid = L.pid 
GROUP BY 
P.pid 
,p.productname 
,Month=datepart(mm, O.date) 
+0

據我所見,這也假定Transact-SQL,但OP使用MySQL。 –

+0

一旦我改變了datepart()函數來提取()它工作正常。謝謝。 – user1633170