所以在练习网站上有一个问题:
哪个产品最受欢迎? (项目数量)
这意味着有客户,他们想知道客户最受欢迎的有序产品(TOP 1订购产品的总体订单)。
我真诚地不知道如何解决这个问题。
有帮助吗?
我到目前为止所尝试的是:
SELECT TOP(1) ProductID, ProductName
FROM Products
GROUP BY ProductID, ProductName
ORDER BY COUNT(*) DESC
但这远远不是他们所要求的。
在这一篇中,我只获得了最低数量的前1名产品,但这对订购此产品的客户来说并不意味着什么。
这只意味着这个特定项目的数量可能很少而且仍然低于其他项目,而其他项目的数量非常高,现在只是很低(但仍然不够低)
我希望我很清楚。
答案 0 :(得分:0)
如果该表中存在数据,您可能只需要通过比计数更复杂的内容进行排序,例如对数量求和(如果该列存在)。另外,如果ProductID和ProductName已经是唯一标识符,请注意您根本不需要group by
和sum
。
SELECT TOP(1) ProductID, ProductName
FROM Products
GROUP BY ProductID, ProductName
ORDER BY SUM(Quantity) DESC
我不知道您的钥匙是什么,但听起来您实际上想要计算客户订购的次数,因此您可能需要加入Customers表。我在这里假设您有一个表订单,每个订单有一行并共享ProductID密钥。我还假设ProductID在产品中是唯一的(根据您的第一个查询可能不正确)。
SELECT TOP(1) Products.ProductID, Products.ProductName
FROM Products
LEFT JOIN Orders
ON Orders.ProductID = Products.ProductID
GROUP BY Products.ProductID, Products.ProductName
ORDER BY COUNT(Orders.OrderID) DESC
这实际上取决于您可以使用的表格和密钥。
答案 1 :(得分:0)
Select top 1 P.ProductID,P.ProductName,Sum(OD.Quantity)AS Quantity
From [Order Details] OD
inner join Products P ON P.ProductID = OD.ProductID
Group By P.ProductID,P.ProductName
Order by Quantity Desc
答案 2 :(得分:-1)
您可以锻炼这样的东西,(表名称/架构可能不同)
with cte_product
as
(
select ProductID,Rank() over (order by Count(1) desc) as Rank from
Orders O
inner join Product P
on P.ProductID = O.ProductID
group by ProductID
)
select P.productID, P.ProductName from
cte_product ct
inner join product p
on ct.productId = p.ProductID
where ct.Rank = 1
Crux使用RANK()来获得最受欢迎的产品。您可以根据需要使用相关联接来获取列。