我正在做一个电子商务市场。在这个市场上有很多卖家在卖。对于每个卖家,我想显示畅销商列表。
数据库在SQL Server中。在这种情况下有2个主表:
表1:存储每个订单的订购产品。字段包括SellerID,OrderID,ProductID和Quantity。
表2:产品主表。字段包括ProductID,...
如何进行查询以获得订单最多的前10个产品?下面我的SQL似乎不起作用......
SELECT TOP (10) SUM(d.Quantity) AS total, d.ProductID, p.Title
From OrderDetails d, Products p
WHERE d.SellerID = 'xxx' AND
d.ProductID = p.ProductID
GROUP by d.ProductID
ORDER BY total DESC
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
select *, d.s
from products p
inner join
(
select top 10 productid, sum(quantity) as s
From OrderDetails
group by productid
order by sum(quantity) desc
)
d on d.productid = p.productid
答案 1 :(得分:0)
这只是猜测。如果你想要“大多数订单”,那么我宁愿计算订单而不是总结数量。
SELECT TOP 10
COUNT(d.OrderID) AS total, d.ProductID, p.Title
FROM OrderDetails d
INNER JOIN Products p ON d.ProductID = p.ProductID
WHERE d.SellerID = 'xxx'
GROUP by d.ProductID, p.Title
ORDER BY COUNT(d.OrderID) DESC
我还修了什么:
GROUP BY缺少一个专栏。您必须在SELECT子句中为每个列命名,但不在聚合函数中。
在ORDER BY子句中,您必须完全按照SELECT子句中的名称命名它。别名在SQL Server中无法正常工作。
使用INNER JOIN语法,该语法不容易忘记在WHERE子句中指定连接。
答案 2 :(得分:-1)
这不是因为您使用的数据库类型而是聚合函数。有很多q&关于stackoverflow中的这个问题。请搜索它。