HonniCilest
Erfahrenes Mitglied
Hallo,
Ich möchte die Anzahl von Identifiern zählen (gruppiert), die einen bestimmten Wert in der Gruppierung aufweisen oder eben nicht, nur diesen oder diesen neben anderen. Ich selber bin auf diese Anforderung in Postgres gestoßen, die Frage ist für mich aber eher allgemeiner Natur. Ich habe eine Lösung gefunden, welche funktioniert und möchte nur wissen, ob das auch irgednwie einfacher geht.
Angenommen ich habe eine Tabelle mit Personen und Fahrzeugen. Und ich möchte jetzt Auto genauer betrachten.
Da gibt es für mich folgende Fälle:
- Anzahl von Personen, die ein Auto oder ein Auto neben anderen Fahrzeugen besitzen
>> Das ist einfach
- Anzahl von Personen, die außer einem Auto kein anderes Fahrzeug besitzen
- Anzahl von Personen, welche ein Auto besitzen und außerdem ein anderes Fahrzeug
- Anzahl von Personen, welche überhaupt kein Auto besitzen
Letzteren 3 habe ich damit gelöst, dass ich ein geschachteltes Statement hatte, das innere hat die Person gruppiert und die Liste aggregiert. Die äußere hat dann je nach Anforderung überprüft, ob der Wert nur Auto/Auto und Trennzeichen/kein Auto enthält.
Also z.B. für den Fall kein Auto
Ich würde gerne wissen ob es auch eine Möglichkeit gibt auf die Verschachtelung und vorallem auf die Agrregatsfunktion zu verzichten.
Danke!
Gruß
HC
Ich möchte die Anzahl von Identifiern zählen (gruppiert), die einen bestimmten Wert in der Gruppierung aufweisen oder eben nicht, nur diesen oder diesen neben anderen. Ich selber bin auf diese Anforderung in Postgres gestoßen, die Frage ist für mich aber eher allgemeiner Natur. Ich habe eine Lösung gefunden, welche funktioniert und möchte nur wissen, ob das auch irgednwie einfacher geht.
Angenommen ich habe eine Tabelle mit Personen und Fahrzeugen. Und ich möchte jetzt Auto genauer betrachten.
Da gibt es für mich folgende Fälle:
- Anzahl von Personen, die ein Auto oder ein Auto neben anderen Fahrzeugen besitzen
>> Das ist einfach
SQL:
SELECT Count(Person)
FROM foobar
WHERE Fahrzeug = 'Auto'
- Anzahl von Personen, die außer einem Auto kein anderes Fahrzeug besitzen
- Anzahl von Personen, welche ein Auto besitzen und außerdem ein anderes Fahrzeug
- Anzahl von Personen, welche überhaupt kein Auto besitzen
Letzteren 3 habe ich damit gelöst, dass ich ein geschachteltes Statement hatte, das innere hat die Person gruppiert und die Liste aggregiert. Die äußere hat dann je nach Anforderung überprüft, ob der Wert nur Auto/Auto und Trennzeichen/kein Auto enthält.
Also z.B. für den Fall kein Auto
SQL:
SELECT Count(Person)
FROM (SELECT Person, string_agg(Fahrzeug, ';') AS Fahrzeuge
FROM foobar
GROUP BY Person) AS List
WHERE NOT Fahrzeuge LIKE '%Auto%'
Ich würde gerne wissen ob es auch eine Möglichkeit gibt auf die Verschachtelung und vorallem auf die Agrregatsfunktion zu verzichten.
Danke!
Gruß
HC
Zuletzt bearbeitet: