因此,在一个实习场所,有一个问题:
哪种产品最受欢迎?(项目数)
这意味着有客户,他们想知道客户所订购的最受欢迎的产品(前1名订购产品的总订单)。
我真的不知道怎么解决这个问题。
有什么帮助吗?
到目前为止,我尝试的是:
SELECT TOP(1) ProductID, ProductName
FROM Products
GROUP BY ProductID, ProductName
ORDER BY COUNT(*) DESC但这与他们的要求相去甚远。
在这一项中,我只得到了数量最少的前1产品,但这并不意味着订购该产品的客户的任何情况。
这只意味着这个特定的项目可能是在低数量,仍然是低于其他,而其他是很高的数量,现在只是低(但仍然不够低)。
希望我说的够清楚了。
发布于 2016-04-25 16:23:08
如果数据存在于该表中,则可能只需按比计数更复杂的方法进行排序,比如对数量进行求和(如果存在该列)。另外,如果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
这取决于您有哪些表和键可供使用。
发布于 2019-02-03 15:04:14
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发布于 2016-04-25 16:25:07
您可以这样做(表名/模式可能不同)
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关键是使用秩()来获得最受欢迎的产品。Rest您可以根据需要使用相关的Joins获取列。
https://stackoverflow.com/questions/36845632
复制相似问题