【问题标题】:SQL - How To Group Data Following Individual Row CalculationsSQL - 如何在单独的行计算之后对数据进行分组
【发布时间】:2015-12-08 09:09:26
【问题描述】:

我对这个问题很着迷。这是我的完整 sqlite 查询的精简版:

SELECT OrderID,
       UnitPrice,
       Quantity,
       Discount
FROM Order Details;

返回这个:

OrderID  UnitPrice  Quantity  Discount
10248    14.0       12        0.00
10248    9.8        10        0.00
10248    34.8        5        0.00
10249    18.6        9        0.00
10249    42.4       40        0.00
10250    7.7        10        0.00
10250    42.4       35        0.15
10250    16.8       15        0.15
10251    16.8       6         0.05
10251    15.6       15        0.05

我想返回一个名为total price 的新列。这将是UnitPrice 乘以Quantity 减去相应百分比Discount 的计算结果。然而,复杂之处在于新列应按OrderID 分组,以表示总订单价格减去单个折扣百分比。

我已经用SUM 聚合和GROUP BY 追了几个小时。将 UnitPrices 和 Quantities 相加很好,但由于折扣适用于不同的值,因此几乎就像需要先计算折扣一样。顺便说一句,折扣不需要单独应用于每个项目。

【问题讨论】:

    标签: mysql sql sql-server sqlite


    【解决方案1】:

    这是假设您使用 MySQL。 MS SQL 服务器可能需要稍有变化,但两者的想法是相同的。

    为了更好地理解这一点,将其分为两个阶段。

    先计算订单项价格:

    SELECT OrderID,
           UnitPrice,
           Quantity,
           Discount,
           UnitPrice*Quantity*(1-Discount) total
          FROM OrderDetails;
    

    然后将GROUP BYSUM() 一起应用,因此您的最终查询将是:

    SELECT OrderID,
           SUM(UnitPrice*Quantity*(1-Discount)) total
          FROM OrderDetails
          GROUP BY OrderID;
    

    【讨论】:

    • 这很好,但如果可能的话,我最好在一个查询中寻找一种方法来做到这一点。我更新了这个问题,让您更好地了解我为什么要避免两个查询。
    • 第一个只是一个示例,您可以使用第二个查询
    • 我跟着。我的错。第二个示例在适应我的完整查询时完美运行。
    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多