【发布时间】:2014-12-18 02:11:04
【问题描述】:
我正在尝试编写一个查询,根据他们购买的所有产品的数量来吸引前 5 位客户。没问题。但除此之外,我还需要为这 5 位客户中的每一个找到最受欢迎的产品。
我想我可以通过查看他们购买最多的产品来做到这一点(所以 productID 的数量是最大数量),但我不太确定如何获取 productID。有任何想法吗?我对这一切都错了吗?谢谢!
select top 5 c.CustomerID, sum(sod.orderqty) AS 'Amount Purchased',
max(sod.orderqty) AS 'Most Purchased'
from Sales.Customer c
inner join Sales.SalesOrderHeader soh on soh.CustomerID = c.CustomerID
inner join Sales.SalesOrderDetail sod on sod.SalesOrderID = soh.SalesOrderID
inner join Production.Product p on p.ProductID = sod.ProductID
group by c.CustomerID
order by 'Amount Purchased' desc
我尝试了下面的查询,但由于某种原因,将 p.name 包含在 group by 中完全超出了最大值。例如,在这个查询中,'Most Purchased' 应该是 20,但它显示为 18(这是 2nd-next max.)
select top 5 soh.CustomerID, sum(sod.orderqty) AS 'Amount Purchased'
, max(sod.orderqty) AS 'Most Purchased', p.name
from Sales.SalesOrderHeader soh
inner join Sales.SalesOrderDetail sod on sod.SalesOrderID = soh.SalesOrderID
inner join Production.Product p on p.ProductID = sod.ProductID
where soh.CustomerID = 29705
group by soh.CustomerID, p.name
order by 'Amount Purchased' desc
【问题讨论】:
标签: sql sql-server