2

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

数据库位于 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

任何帮助深表感谢。谢谢!

4

3 回答 3

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

请参阅此 SQLFiddle 示例

于 2012-07-04T08:55:41.987 回答
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 子句中指定连接。

于 2012-07-04T08:34:11.030 回答
-1

这不是因为您使用的是什么类型的数据库,而是因为聚合函数。在stackoverflow中有很多关于这个问题的问答。请搜索它。

于 2012-07-04T08:37:16.320 回答