按一列分组,对另一个 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 求和。重复条目(包括特定产品的交易的总交易价值)的主要内容,如果未能解决你的问题,请参考以下文章