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 BYSUM() 一起应用,因此您的最终查询将是:

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

【讨论】:

这很好,但如果可能的话,我最好在一个查询中寻找一种方法来做到这一点。我更新了这个问题,让您更好地了解我为什么要避免两个查询。 第一个只是一个示例,您可以使用第二个查询 我跟着。我的错。第二个示例在适应我的完整查询时完美运行。

以上是关于SQL - 如何在单独的行计算之后对数据进行分组的主要内容,如果未能解决你的问题,请参考以下文章

如何对重复的行进行分组并计算它们?

如何在 SQL 中将列分组为单独的行

如何根据条件对sql中的行进行分组

在 SQL 中按组中的行计算时间差异

sql - 如何使用单独的逗号对列进行分组

SQL查询如何对增量键RANK中的相同结果进行单独分组