SQL - 如何在单个行计算之后对数据进行分组

时间:2015-09-11 18:11:06

标签: mysql sql sql-server sqlite

我对这个问题很着迷。这是我的完整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追踪我的尾巴数小时。对单位价格和数量进行求和是合理的,但由于折扣适用于不同的价值,因此几乎需要首先计算折扣。折扣不需要单独申请每个项目顺便说一句。

1 个答案:

答案 0 :(得分:3)

这假设您使用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;