【问题标题】:Select top and order from two tables从两个表中选择顶部和顺序
【发布时间】:2012-07-04 08:23:49
【问题描述】:

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

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

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

【问题讨论】:

  • 您是否收到错误或错误结果?
  • 减去我们标记的人请不要这样做,因为每个人都在努力帮助海报。

标签: sql sql-server


【解决方案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

【讨论】:

    【解决方案2】:

    这只是一个猜测。如果您想要“最多订单”,那么我宁愿计算订单而不是总数量。

    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 子句中指定连接。

    【讨论】:

    • 这对我有用,但我需要做一些调整。改为使用 SUM,并添加了一些其他字段。谢谢!
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2020-09-25
      相关资源
      最近更新 更多