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

标签 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。将 UnitPrices 和 Quantities 相加很好,但由于折扣适用于不同的值,因此几乎需要先计算折扣。顺便说一句,折扣不需要单独应用于每件商品。

最佳答案

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

关于mysql - SQL - 如何在单行计算后对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32529678/

相关文章:

php - MYSQL中的2个表的查询

php - 无法查看laravel中的数据集合

MySQL逗号分隔值到多行

sql - 查找每个第二个和第四个星期四

php - 我有一个表,其中包含带有日期列的数据。需要 Mysql 查询帮助!

sql - mysql - 基于其他行更新行

mysql - SQL - 比较一张表中的数据

sql-server - 转换 WHERE 子句中的多个 'old format' 连接

SQL Server 动态排序依据

mysql - SQL : "Strict equals" doesn't work with LIKE % if last repeats a few times