2014-02-19 150 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