[英]Find all the combinations in SQL including duplicates
假设我有一张订单表
ID, Products
---- ----
1 Banana
1 Apple
1 Pear
2 Apple
2 Banana
3 Banana
3 Apple
4 Banana
4 Pear
我需要计算购买相同产品的次数。 我尝试了一些不同的方法(内部连接;创建排名并旋转数据)但是我遇到的问题是它计算一次(我的结果表):
Combination, Total
------ -----
Banana, Apple, Pear 1
Apple, Banana 2
Banana, Pear 1
当我们有一个小的订单列表时,这应该足够了,但是当列表包含数千行时,很难查看这些结果。 假设我只关心看到包含香蕉的组合。 如果我对列表进行排序,“Apple, Banana”的组合仍然不会接近组合中首先提到 Banana 的列表。
所以我需要看到每个产品的结果在组合列表中排在第一位(我不关心重复)。 所以结果表应该是这样的:
Combination, Total
------ -----
Apple, Banana, Pear 1
Apple, Banana 2
Banana, Apple, Pear 1
Banana, Apple 2
Banana, Pear 1
Pear, Apple, Banana 1
Pear, Banana 1
注意:组合可以在不同的列中拆分或用符号分隔。 如果组合包含 3 个或更多产品,则在第一个产品之后订购无关紧要。
您可以使用string_agg()
和两个级别的聚合:
select products, count(*) as num_orders
from (select id,
string_agg(product, ', ') within group (order by product) as products
from orders o
group by id
) o
group by products;
这是一个 db<>fiddle。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.