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

group by one column, sum over another w. repeating entries (total transaction value for transactions incl a specific product)

我有 table 笔交易,我想为每个产品计算包括该产品在内的交易的总交易价值。

+---------------+-----------+----------+-----------+
| 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。

我想要 select 以下内容(鉴于上面的 table):

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

我还需要能够为 Redshift 执行此操作。

感谢您的任何见解。

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

然后加入原来的 table 并对每个产品进行分组以总结每个参与交易的总和。

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 |