Mehrere Counts auf eine Tabelle inkl Gruppierung
Benjamin.
- datenbank
0 Benjamin.0 Vinzenz Mai
Hallo,
ich versuche eine Tabelle mit mehreren Counts auszuwerten und zu gruppieren.
Tabelle sieht ungefähr so aus :
ID | Name | Schalter
1 | A | j
2 | B | j
3 | C | n
4 | B | j
5 | A | n
Herauskommen soll dann :
Anzahl| Name | j | n
2 | B | 2 | 0
2 | A | 1 | 1
1 | C | 0 | 1
Um einfach die Anzahl und Name auszugeben, kann ich
select count(*) as Anzahl, Name from Table group by Name
Doch das Zählen des Schalters nach den 2 möglichkeiten fällt mir schwer.
select count(*) as Anzahl, Name, count(Schalter="j") as j, count(Schalter="n") as n from Table group by Name order by Anzahl desc, j desc, n
wäre mein Versuch gewesen.. klappt aber auch nicht so ganz.
Mit einem Subselect habe ich es auch schon probiert, aber dann greift die Gruppierung nicht.
Hat jemand eine fixe Idee?
Verwendet wird eine MySQL Datenbank in der Version 5.1.32.
Vielen Dank!
Mit einem Self Join im Subselect hat es geklappt :)
SELECT count( * ) AS Anzahl, Name, (SELECT count( * ) AS j FROM Table AS B WHERE B.Schalter = 'j' AND B.Name = table.Name) as j,
(SELECT count( * ) AS n FROM Table AS C WHERE C.schalter = 'n' AND C.Name = table.Name ) as n FROM table
GROUP BY Name ORDER BY Anzahl DESC, j desc, n
Hallo Benjamin,
ID | Name | Schalter
1 | A | j
2 | B | j
3 | C | n
4 | B | j
5 | A | n
Herauskommen soll dann :
Anzahl| Name | j | n
2 | B | 2 | 0
2 | A | 1 | 1
1 | C | 0 | 1
Du suchst eine Kreuztabelle. Schließlich werden aus den unterschiedlichen Werten in der Spalte Schalter Spaltenüberschriften.
MySQL enthält keine eingebaute Unterstützung für Kreuztabellen, aber Dein Statement läßt sich analog zu meinen Beispielen in einem Archivbeitrag zusammensetzen:
SELECT -- Gib mir
COUNT(Name) Anzahl, -- die Anzahl des Auftretens des Namens
Name, -- sowie den Namen selbst
-- berücksichtige nur Zeilen mit dem Wert j in Schalter
-- und diese Zeilen möchtest Du zählen
-- und benenne diese Reihe j
COUNT(CASE WHEN Schalter = 'j' THEN Schalter ELSE NULL END) j,
-- analog für n
-- berücksichtige nur Zeilen mit dem Wert n in Schalter
-- und diese Zeilen möchtest Du ebenfalls zählen
-- und benenne diese Reihe n
COUNT(CASE WHEN Schalter = 'n' THEN Schalter ELSE NULL END) n
FROM
Tabelle
GROUP BY Name
Freundliche Grüße
Vinzenz