2014-02-19 2 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), 판매 수량을 만들려는 수 제품을 구입 한 별개의 고객 및 금액은 에 해당합니다.

orders.date에서 개월을 얻으려면 extract()을 사용했습니다. 각 달 및 각 제품을 반복하는 방법을 알아야합니다. 나는 작동하는 질문을 내놓을 수 없었다. MySQL에서도 가능합니까? 매월 제품 이름을 반복하여 총 가격을 계산하고 각 제품 판매가 전체에 얼마나 기여했는지를 계산합니다. 특정 제품 또는 월에 대해이를 구현하는 방법을 알고 있지만 매월 판매되는 제품에 대해서는 알지 못합니다. 조인을 사용해 보았지만 실패합니다. 쿼리를 구현하고 구현할 논리가 필요합니다.

+0

물론 가능하지만 루프가 필요하지 않습니다. MySQL에 포함 된 많은 SQL dialects에는 루프가 있지만 언어 (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() 함수를 extract() 함수로 변경하면 올바르게 작동합니다. 감사합니다. – user1633170

관련 문제