SQL-Häufigkeitsverteilungsabfrage zum Zählen von Bereichen mit Gruppierung nach und einschließlich 0 Zählungen

8

Gegeben:

%Vor%

Ich möchte die Anzahl der Dinge für jeden 10-Jahres-Bereich zählen, z. B.

%Vor%

Diese Abfrage kommt nahe:

%Vor%

Ausgabe:

%Vor%

Allerdings zeigt es mir nicht die Bereiche, die 0 zählen. Wie kann ich die Abfrage so ändern, dass sie auch die Bereiche dazwischen mit 0 zählt?

Ich habe ähnliche Stackoverflow-Fragen für die Zählbereiche gefunden, einige für die Anzahl von 0, aber sie müssen jeden Bereich angeben (entweder die Bereiche in die Abfrage hartcodieren oder die Bereiche in eine Tabelle setzen). Ich würde es vorziehen, eine generische Abfrage wie oben zu verwenden, in der ich nicht jeden Bereich explizit angeben muss (z. B. 0-10, 10-20, 20-30, ...). Ich benutze PostgreSQL 9.1.3.

Gibt es eine Möglichkeit, die obige einfache Abfrage so zu ändern, dass sie 0 zählt?

Ähnliche:
Oracle: Wie man "gruppiert" über einen Bereich?
Get Häufigkeitsverteilung eines Dezimalbereichs in MySQL

    
Rob Bednark 13.03.2012, 01:50
quelle

2 Antworten

10

generate_series zur Rettung:

%Vor%

Das Herausfinden der oberen Grenze für generate_series sollte bei einer separaten Abfrage trivial sein, ich habe nur 10 als Platzhalter verwendet.

Dies:

%Vor%

erzeugt im Wesentlichen eine Inline-Tabelle namens s mit einer einzelnen Spalte d , die die Werte von 0 bis einschließlich 10 enthält.

Sie können die beiden Abfragen (eine, um den Bereich herauszufinden, eine, um die Anzahl zu berechnen) in eine Funktion umbrechen, falls erforderlich.

    
mu is too short 13.03.2012, 02:15
quelle
1

Sie brauchen einen Weg, um die Tabelle der Altersgruppen zu erfinden. Zeilennummer funktioniert normalerweise gut. Machen Sie ein kartesisches Produkt gegen einen großen Tisch, um viele Zahlen zu erhalten.

%Vor%

BEARBEITEN: mu ist zu kurz hat eine viel elegantere Antwort, aber wenn Sie keine generate_series Funktion auf der db haben, ...:)

    
Glenn 13.03.2012 02:33
quelle