按一列分组,对另一个 w 求和。重复条目(包括特定产品的交易的总交易价值)

Posted

技术标签:

【中文标题】按一列分组,对另一个 w 求和。重复条目(包括特定产品的交易的总交易价值)【英文标题】:group by one column, sum over another w. repeating entries (total transaction value for transactions incl a specific product) 【发布时间】:2015-12-07 16:44:42 【问题描述】:

我有一个交易表,并且想计算每个产品的交易总价值,包括该产品。

+---------------+-----------+----------+-----------+
| TransactionId | ProductId | Quantity | UnitPrice |
+---------------+-----------+----------+-----------+
|             1 | A         |        2 | 3.00      |
|             1 | B         |        1 | 6.00      |
|             2 | B         |        1 | 6.00      |
|             3 | A         |        6 | 3.00      |
|             3 | C         |        2 | 8.00      |
+---------------+-----------+----------+-----------+

例如,产品 A 有两个交易:交易 1 和 3。交易 1 的总收入是产品 A 的 6.00 和产品 B 的 6.00,总计 12.00。交易 3 的总收入是产品 A 的 18.00 和产品 C 的 16.00,总计 34.00。因此,包括产品 A 在内的交易总收入为 12.00 + 34.00 = 46.00。

我想选择以下(根据上表):

+-----------+----------------+
| ProductId | TotalBasketRev |
+-----------+----------------+
| A         | 46.00          |
| B         | 18.00          |
| C         | 34.00          |
+-----------+----------------+

我还需要能够为 Redshift 做到这一点。

感谢您的任何见解。

【问题讨论】:

这个结果对我来说似乎真的没用......我猜你看到哪些物品是大手笔购买的,但我怀疑实际结果会有很大差异。 【参考方案1】:

首先您需要计算每笔交易的总额。

然后回到您的原始表格,并为每个产品分组,以汇总每个参与交易的总和。

SQL Fiddle Demo

SELECT T."ProductId", SUM(TTotal.total)
FROM Transactions T
JOIN
    (
      SELECT "TransactionId", SUM ("Quantity" * "UnitPrice") total
      FROM Transactions
      GROUP BY "TransactionId"
    ) Ttotal
  ON T."TransactionId" = TTotal."TransactionId"
GROUP BY  T."ProductId"    
ORDER BY  T."ProductId"

输出

| ProductId | sum |
|-----------|-----|
|         A |  46 |
|         B |  18 |
|         C |  34 |

【讨论】:

以上是关于按一列分组,对另一个 w 求和。重复条目(包括特定产品的交易的总交易价值)的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark数据框:对一列求和,同时对另一列进行分组

如何对另一列的分组中的一列求和?

如何按id python按一列顺序对两列进行分组[重复]

Pandas数据框:按一列分组,但由其他列连接和聚合[重复]

sql语句 按一列分组 然后再按别一列组内排序?

Spark scala 按一列分组,将另一列分成列表