【问题标题】:Order Line quantity sum total SQL calculation订单行数量总和SQL计算
【发布时间】:2019-08-24 23:13:54
【问题描述】:

我有订单:

我有 OrderLine:

我想显示哪个产品的销量最高。

我想汇总订单行中属于状态为“已完成”的订单的每个数量

查看数据,我们只看到orderID = 3orderstatus = Completed,因此我们只需要OrderLine 对应OrderID = 3 - 即OrderLineID = 6OrderLineID = 7

所以我们的预期结果将是ProductID 1Quantity 11,如下所示:

ProductID|OrderLineQuantity

--------1-----|----------11-----------

到目前为止,我的代码产生了一个错误:

选择列表中的“OrderLine.ProductID”列无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。

我的代码:

SELECT OrderLine.ProductID, SUM(OrderLineQuantity)FROM OrderLine Inner Join [Order] ON OrderLine.OrderID = [Order].OrderID  WHERE OrderStatus = 'Completed'

【问题讨论】:

    标签: sql asp.net sql-server visual-studio


    【解决方案1】:

    您需要GROUP BY 来解决语法问题,然后再使用其他东西来获得顶级产品:

    SELECT TOP (1) ol.ProductID, SUM(ol.OrderLineQuantity)
    FROM OrderLine ol Inner Join
         [Order] o
          ON ol.OrderID = o.OrderID
    WHERE o.OrderStatus = 'Completed'
    GROUP BY ol.ProductID
    ORDER BY SUM(ol.OrderLineQuantity) DESC;
    

    【讨论】:

    • 这行得通,但是 TOP (1) 是什么意思?最后是DESC?我想看看,说 - 前 10 名最受欢迎的产品
    • Gordon Linoff 的代码非常完美。您可以添加:SELECT TOP 50 PERCENT * FROM Table; 查看热门记录。 DESC 的意思是 Descending 他订购表格的方式。
    • 是的,我同意,完美,我将前 10 名产品更改为 TOP (10) :)
    • @BingoDingo 。 . .当然,您可以根据需要返回任意多的行。我选择了“1”,因为问题是:“我想显示哪种产品的销量最高。”。
    猜你喜欢
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多