SQL - 如何在单独的行计算之后对数据进行分组
Posted
技术标签:
【中文标题】SQL - 如何在单独的行计算之后对数据进行分组【英文标题】:SQL - How To Group Data Following Individual Row Calculations 【发布时间】: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 相加很好,但由于折扣适用于不同的值,因此几乎就像需要先计算折扣一样。顺便说一句,折扣不需要单独应用于每个项目。
【问题讨论】:
【参考方案1】:这是假设您使用 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;
【讨论】:
这很好,但如果可能的话,我最好在一个查询中寻找一种方法来做到这一点。我更新了这个问题,让您更好地了解我为什么要避免两个查询。 第一个只是一个示例,您可以使用第二个查询 我跟着。我的错。第二个示例在适应我的完整查询时完美运行。以上是关于SQL - 如何在单独的行计算之后对数据进行分组的主要内容,如果未能解决你的问题,请参考以下文章