SQL Abfrage - Distinct und Group by

BenschM@ster

Mitglied
Abend alle beisammen,

hab hier ein kniffliges Problem. Und zwar habe ich eine Tabelle bestehend aus 3 Spalten
id | type | produkt_id |

Die Tabelle ist dafür da um herauszufinden wieviele Klicks auf ein Produkt durchgeführt wurden, dabei gibt es 3 verschiedene Klick Typen (Klick auf das Produkt, Klick auf die Produkt Homepage, Klick auf Produkt PDF).

Nun möchte ich zusammenfassend für jedes Produkt und jeden Typ wissen wieviele Klicks durchgeführt wurden.
Beispiel:

type | produkt
0 kaffee
1 bier
1 kaffee
2 wasser
0 wasser
0 bier

Herauskommen sollen jetzt für jedes Produkt ein Ergebnis mit 3 Variablen:
->
kaffe
type 0: 1
type 1: 1
type 2: 0

bier
type 0: 1
type 1: 1
type 2: 0

wasser:
type 0: 1
type 1: 0
type 2: 1

Wenn ich Group by type,produkt mache, dann bekomme ich zwar leider für jeden typ ein eigenes Ergebnis. Das ist deshalb ein Problem, weil ich so nie wissen kann, ob es für jedes Produkt 0,1,2 oder 3 Ergebnisse gibt, da es kein Ergebnis geben wird, wenn es von einem Typ keinen Eintrag gibt.

Etwas schwierig zu erklären, aber ich hoffe ihr wisst was ich meine ;-)
Wäre schön wenn es da eine Lösung gäbe.

Gruß,
Ben
 
Hi,
danke schonmal für den Tipp,
leider ist das nicht ganz das was ich suche.

Bei deiner Variante tritt nämlich das oben beschriebene Problem auf, dass ich so für jeden der 3 Typen ein eigenes Ergebnis erhalte.
Da mir nicht bekannt ist, ob zu jedem Produkt alle 3 Typen vorhanden sind hab ich dann später bei der Abfrage Probleme.

Sowas kommt raus:

produkt klicks type
kaffee 1 1
kaffee 1 2
wasser 2 0
wasser 1 1

Das soll rauskommen:

produkt klicks1 klicks2 klicks3
kaffee 0 1 1
wasser 2 1 0
 
Moin BenschM@ster,

versuch es so:
SQL:
SELECT Produkt, 
  sum(IF(type = 0, 1, 0)) as klickstype0,
  sum(IF(type = 1, 1, 0)) as klickstype1,
  sum(IF(type = 2, 1, 0)) as klickstype2
FROM produkte
GROUP by Produkt

Ich habe mal mySQL unterstellt.
In anderen DBMSen ist evtl
* statt der "IF(bedingung, dann, sonst)"-Funktion
* eine "SELECT CASE when bedingung THEN bla ELSE blubb END" -Syntax erforderlich.

Die Mimik ist allerdings dieselbe.

Grüße
Biber
 
Zurück