2014-06-20 37 views
0

我對SQL相當陌生,並且難以解決問題。真實世界總銷售額SQL查詢

'銷售人員銷售的所有產品的銷售總額中銷售量最高的五種單件產品中的每種產品的總銷售量是多少?確保查詢按降序返回總銷售額。只考慮在@target_date參數前六個完整月份進行的銷售。'

DB中存在3個表。
推銷員(SalesPersonID,SalesYTD)
的SalesOrderHeader(的SalesOrderID,訂購日期,並按ShipDate)
的SalesOrderDetail(的SalesOrderIDSalesOrderDetailID,OrderQty,產品ID,單價)

這就是我迄今爲止。我需要將我所擁有的內容編譯成一個聲明並進行必要的修改。請幫忙!

拍攝由單位前5位最高銷量,下面的語法應該工作:

SELECT 
    ProductID, 
    SUM(Orderqty*Unitprice) 
FROM SalesOrderDetail 
GROUP BY ProductID 
WHERE Orderqty >=1 
    AND COUNT(productID) =5 
ORDER BY SUM(Orderqty*Unitprice) DESC 
LIMIT 5; 

對於target_date參數,我認爲這將是沿着這些線路的東西嗎?

SELECT 
    SalespersonID AS ‘Sales Representative’, 
    SalesYTD AS ‘Total Sales’, target_date 
FROM Salesperson 
WHERE target_date BETWEEN ‘01-DEC-13’ AND ’01-May-14’; 
+0

如果表格描述是完整的,那麼沒有連接從'SalesOrderDetail'到'SalesPerson'。 –

+0

假設它通過SalesPersonID的FK進行連接。對不起 - 忘了提及。 – Ramrod

+0

我將表格縮放到必要的字段。 – Ramrod

回答

0

前五名銷售額最高,我寧願建議稍微簡化

select productid, sum(orderqty * unitprice) as sales 
from salesorderdetail 
group by productid 
order by sales desc 
limit 5 

和六個月前@target_date

where orderdate between date_sub(@target_date, interval 6 months) and @target_date 

假設FK SalesOrderDetail(SalesPersonID),然後你可以加入表格和前五名的銷售額爲

select p.* 
from salesperson p 
join salesorderheader h on h.salespersionid = p.salespersionid 
join salesorderdetail d on d.salesorderid = h.salesorderid 
join (select productid, sum(orderqty * unitprice) as sales 
     from salesorderdetail 
     group by productid 
     order by sales desc 
     limit 5) t5 on t5.productid = d.productid 
where h.orderdate between date_sub(@target_date, interval 6 months) and @target_date 
order by p.salesytd desc