【发布时间】:2020-06-08 20:18:58
【问题描述】:
我有一个包含brand 和uid 列的表。当特定用户与品牌进行交易时,它会捕获信息。表格示例如下
+-------+-----+
| brand | uid |
+-------+-----+
| A | 111 |
| B | 111 |
| C | 111 |
| A | 112 |
| B | 112 |
| D | 112 |
| A | 114 |
| B | 114 |
| C | 114 |
| B | 115 |
| C | 115 |
| A | 116 |
| D | 116 |
+-------+-----+
我想要两个品牌之间共有的用户数。例如,如果一个用户与品牌 A 进行交易,那么他们中有多少人与品牌 B 进行交易等等(所有可能的组合)
想要的输出如下
+--------+--------+------------+
| brand1 | brand2 | count_user |
+--------+--------+------------+
| A | A | 4 |
| A | B | 3 |
| A | C | 2 |
| A | D | 2 |
| B | A | 3 |
| B | B | 4 |
| B | C | 3 |
| B | D | 1 |
| C | A | 2 |
| C | B | 3 |
| C | C | 3 |
| C | D | 0 |
| D | A | 2 |
| D | B | 1 |
| D | C | 0 |
| D | D | 2 |
+--------+--------+------------+
输出应如下所示
- 有 4 位用户与品牌 A 进行过交易(第 1 行)
- 有 3 位用户曾与品牌 A 和 B 进行过交易(第 2 行)
- 有 2 位用户曾与品牌 A 和 c 进行过交易(第 3 行)
等等........
【问题讨论】:
-
你真的需要两个品牌的两行,即
A,B,3和B,A,3吗?这个结果是相当昂贵的,如果你能减少结果行的数量应该会更快
标签: sql join hive count hiveql