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