2017-08-29 6 views
0

Ich habe eine SQL-Abfrage, die mir die Kunden und Produkt für jede Wie werden unterschiedliche Werte in zwei Kategorien gezählt?

Kauf zeigt
client | product 
----------------------- 
Lucy Lu | Banana 
Lucy Lu | Banana 
Lucy Lu | Pineapple  
Mad Damon | Banana 
Mad Damon | Apple 
Mad Damon | Apple 
Peter Fox | Banana 
Peter Fox | Banana 
Peter Fox | Banana 
Peter Fox | Apple  
Peter Fox | Apple 

ich deutliche diese Abfrage wollen, aber die Anzahl der jedes Produkt für jeden Kunden, so kann ich für jeden Kunden, wie viel sehen jedes Produkt, das er gekauft:

client | product | count 
---------------------------- 
Lucy Lu | Banana | 2 
Lucy Lu | Pineapple | 1 
Mad Damon | Banana | 1 
Mad Damon | Apple  | 2 
Peter Fox | Banana | 3 
Peter Fox | Apple  | 2 

ich versuchte es mit count(DISTINCT product), count(DISTINCT client), count(*) und GROUP BY (client) oder GROUP BY (product), aber keine brauchbare Lösung bekommen. Wenn ich es mit SELECT DISTINCT [Rest der Abfrage] versuche, bekomme ich, was ich will, aber ohne die Spalte zählen.

+4

'select Kunde, Produkt, COUNT (*) von t Gruppe von Client-Produkt mit –

+0

Welche [DBMS] (https://en.wikipedia.org/wiki/DBMS) verwenden Sie? Postgres? Orakel? –

Antwort

1

Sie müssen DISTINCT nicht verwenden. Eine einfache GROUP BY mit COUNT wird den Trick machen.

Oto Shavadze vorgeschlagen, diese Abfrage:

select client, product, count(*) 
from t 
group by client, product; 

Hier können Sie Gruppen auf der Grundlage der unterschiedlichen Werte von (Client, Produkt) Paare machen. COUNT gibt Ihnen die Anzahl der Zeilen in jeder dieser Gruppen.

+0

Wenn @Oto Shavadze seinen Kommentar als Antwort postet, bin ich bereit, meins zu löschen. –

+0

Vielen Dank! Das war es. – oli

0

Versuchen Sie diese Abfrage und Sie erhalten die Ausgabe. Hier ist test_data der Tabellenname. Bitte ersetzen Sie es durch Ihren Tabellennamen.

SELECT count(product) as count,client, product from test_data group by product,client 
Verwandte Themen