簡體   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