2016-03-28 36 views
0

我有一個包含兩列的表:產品和客戶端。 我需要在產品之間創建所有對,並添加第三列,其中包含購買這兩個產品的客戶數量。sql redshift:根據一列值和每個組合的購買數量(事件)創建表格

例子:

clients product 
001 pants 
001 shirt 
001 pants 
002 pants 
002 shirt 
002 shoes 

我需要重新排序的產品tuplas與誰買了兩個產品獨特的客戶端的數量增加第三列。所以前面的例子,結果是:

product1 product2 count 
pants shirt 2 
pants shoes 1 
shirt shoes 1 

我想避免重複的信息。例如,不需要一排「襯衫褲2」。

會有人知道如何做到這一點?

謝謝!

回答

1

嗯。 。 。你有重複的東西,所以這可能會變得混亂。

簡單的方式是joingroup by

select t1.product, t2.product, count(distinct t1.client) 
from t t1 join 
    t t2 
    on t1.product = t2.product 
group by t1.product, t2.product; 

這可能會非常昂貴的思想,尤其是如果有很多重複。

一種替代方法是做join前使用distinct

select pc.product, pc2.product, count(*) 
from (select distinct product, client from t) pc 
    (select distinct product, client from t) pc2 
    on pc2.client = pc.client and pc2.product < pc.product; 
+0

謝謝你,但對你的t1.product第一個例子= t2.product會給我同樣的產品在一排。你的意思是在t1.client = t2.client上? – DroppingOff

+0

這返回幾乎我所需要的。唯一缺少的是避免重複的條件:我想避免重複的信息。例如,不需要一排「襯衫褲2」。 – DroppingOff

相關問題