2016-03-28 3 views
0

Ich habe eine Tabelle mit zwei Spalten: Produkt und Client. Ich muss alle Paare zwischen den Produkten erstellen und eine dritte Spalte mit der Anzahl der Kunden hinzufügen, die beide Produkte dieses Paares kaufen.sql redshift: Erstellen Sie Tabelle mit Paaren basierend auf einer Spalte Werte plus die Anzahl der Käufe (Ereignisse) jeder Kombination

Beispiel:

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

ich brauchen würde, die Produkte in tuplas neu zu ordnen und eine dritte Spalte mit der Anzahl der Unique Clients, die die beiden Produkte gekauft hinzuzufügen. So vorherigen Beispiel wäre das Ergebnis:

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

ich duplizierten Informationen vermeiden möchten. Zum Beispiel würde eine Zeile "Shirt Pants 2" nicht benötigt werden.

Würde jemand wissen, wie man das macht?

Danke!

Antwort

1

Hmmm. . . Du hast Duplikate, das könnte chaotisch werden.

Die einfachen Möglichkeiten, ein join und group 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; 

Dies könnte sehr teuer Gedanken kommen, vor allem, wenn es viele Duplikate sind.

Eine Alternative ist distinct zu verwenden, bevor die join tun:

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

Danke, aber in Ihrem ersten Beispiel auf t1.product = t2.product würde ich in einer Reihe gleiches Produkt. Meintest du auf t1.client = t2.client? – DroppingOff

+0

Das bringt fast das zurück, was ich brauche. Das einzige, was fehlt, wäre die Bedingung, Duplikate zu vermeiden: Ich möchte doppelte Informationen vermeiden. Zum Beispiel würde eine Zeile "Shirt Pants 2" nicht benötigt werden. – DroppingOff

Verwandte Themen