繁体   English   中英

查找 SQL 中的所有组合,包括重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM