选择顶部并从两个表中订购

时间:2012-07-04 08:23:50

标签: sql sql-server

我正在做一个电子商务市场。在这个市场上有很多卖家在卖。对于每个卖家,我想显示畅销商列表。

数据库在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

非常感谢任何帮助。谢谢!

3 个答案:

答案 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

请参阅this SQLFiddle example

答案 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中的这个问题。请搜索它。