我对这个问题很着迷。这是我的完整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
追踪我的尾巴数小时。对单位价格和数量进行求和是合理的,但由于折扣适用于不同的价值,因此几乎需要首先计算折扣。折扣不需要单独申请每个项目顺便说一句。
答案 0 :(得分:3)
这假设您使用MySQL。 MS SQL服务器可能需要稍微变化,但两者的想法是相同的。
为了更好地理解这一点,请将其分为两个阶段。
首先计算订单项价格:
SELECT OrderID,
UnitPrice,
Quantity,
Discount,
UnitPrice*Quantity*(1-Discount) total
FROM OrderDetails;
然后将GROUP BY
与SUM()
一起使用,因此您的最终查询将是:
SELECT OrderID,
SUM(UnitPrice*Quantity*(1-Discount)) total
FROM OrderDetails
GROUP BY OrderID;