【问题标题】:Real world total sales SQL query真实世界总销售额 SQL 查询
【发布时间】:2014-06-20 22:23:20
【问题描述】:

我对 SQL 还很陌生,很难解决问题。

'对于销量最高的五种产品中的每一种都至少销售一种产品的销售人员,所有产品的总销售额是多少?确保查询以降序返回总销售额。仅考虑在 @target_date 参数之前的六个月内发生的销售。'

数据库中存在 3 个表。
销售人员 (SalesPersonID,SalesYTD)
SalesOrderHeader (SalesOrderID,OrderDate,ShipDate)
SalesOrderDetail(SalesOrderIDSalesOrderDetailID、OrderQty、ProductID、UnitPrice)

这是我目前所处的位置。我需要将我所拥有的内容编译成一份声明并进行必要的修改。请帮忙!

要按单位获取前 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’;  

【问题讨论】:

  • 如果表描述完整,则SalesOrderDetailSalesPerson之间没有连接。
  • 假设它通过 SalesPersonID 的 FK 建立了连接。抱歉 - 忘了提。
  • 我将表格缩小到必要的字段。

标签: mysql sql join


【解决方案1】:

对于销量最高的前五名,我宁愿建议稍微简化一下

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

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-10
    相关资源
    最近更新 更多