mySQL-Abfrage
thorsten
- mysql
Hallo,
ich habe eine Tabelle, die wie folgt aussieht:
| Titel | Geschlecht | | Dr. | männlich | Dipl. | weiblich | Prof. | weiblich | ... | ...
Ich bin auf der Suche nach einer Abfrage, die daraus folgende Tabelle erzeugt:
Titel | Anzahl gesamt | Anzahl männlich | Anzahl weiblich Dr. | 17 | 8 | 9 Dipl. | 22 | 12 | 10 Prof. | 13 | 6 | 7 ... | ... | ... | ...
Hat jemand einen Tip, wie die Abfrage ungefähr aussehen muss?
Viele Grüße Thorsten
Tach!
Ich bin auf der Suche nach einer Abfrage, die daraus folgende Tabelle erzeugt:
Titel | Anzahl gesamt | Anzahl männlich | Anzahl weiblich Dr. | 17 | 8 | 9 Dipl. | 22 | 12 | 10 Prof. | 13 | 6 | 7 ... | ... | ... | ...
Hat jemand einen Tip, wie die Abfrage ungefähr aussehen muss?
Ich würde versuchen, über den Titel zu gruppieren, dann kannst du mit COUNT(*) schonmal die Gesamtanzahl ermitteln. Für die beiden anderen Teilmengen würde ich je eine Correlated Subquery mit ins SELECT setzen.
dedlfix.
Was Du da machst, ist eine Pivot-Abfrage.
Auf Stackoverflow ist das schon öfter debattiert worden, klicke hier für einen beispielhaften Thread dazu.
Offen ist immer, ob man eine Pivotisierung effizienter im SQL oder im hostenden Code macht. Wenn die Zähler groß werden, würde ich eine Pivotisierung im Server bevorzugen, um die übertragene Datenmenge vom Server zur Application klein zu halten.
Eine direkte SQL Syntax zur Pivotisierung gibt's jedenfalls noch nicht. Nur Workarounds mit Subqueries oder COUNT(CASE...) Konstrukten.
Rolf
Hallo,
ich habe jetzt folgende Lösung:
SELECT r.name AS 'Titel', count(*) AS 'Anfragen insgesamt',
SUM(
CASE
WHEN r.gender='0'
THEN 1
ELSE 0
END
) AS 'Geschlecht männlich',
SUM(
CASE
WHEN r.gender='1'
THEN 1
ELSE 0
END
) AS 'Geschlecht weiblich'
FROM
requests AS r
GROUP BY r.name
Besten Dank an alle!