2017-06-04 2 views
1

In Postgresql, wie führe ich eine Abfrage, die die Summe der Zeilen einer bestimmten Tabelle nach Monat zurückgibt? Ich würde das Ergebnis gefällt, etwas zu sein wie:Wie führe ich Abfragen in Postresql aus, die eine nach Monaten gruppierte Datenanzahl zurückgeben?

month: January 
count: 67 

month: February 
count: 85 
.... 
.... 

Lassen Sie uns ein nehme an, ich habe eine Tabelle, users. Diese Tabelle enthält einen Primärschlüssel id und eine created_at Spalte mit Zeit, die in ISO8601-Formatierung gespeichert wird. Letztes Jahr n Anzahl der Benutzer erstellt, und jetzt möchte ich wissen, wie viele von Monat erstellt wurden, und ich möchte die Daten an mich in dem oben genannten Format zurückgegeben - nach Monat gruppiert und eine damit verbundene Anzahl, die angibt, wie viele Benutzer erstellt wurden Monat.

Kann jemand die obige SQL-Abfrage in Postgresql durchführen?

+1

Verwendung 'Gruppe by' .. das ist einfach. Probieren Sie es aus und stellen Sie eine Frage, wenn Sie nicht weiterkommen. –

+0

immer noch mit diesem Problem ... hier ist eine SQL-Abfrage Ich habe versucht, aber es funktioniert nicht: 'wählen date_trunc ('Monat', TIMESTAMP '2017-03-20 13: 38: 46.688-04') als "Monat", Anzahl (*) von Benutzern, bei denen subscribe = true und '2017-03-20 13: 38: 46.688-04'> now() - interval '12 monates 'Gruppe von created_at; ' – robertjewell

Antwort

1

Die Abfrage würde wie folgt aussehen:

select date_trunc('month', created_at) as mm, count(*) 
from users u 
where subscribed = true and 
     created_at >= '2016-01-01' and 
     created_at < '2017-01-01' 
group by date_trunc('month', created_at); 

Ich weiß nicht, wo die Konstante '2017-03-20 13:38:46.688-04' herkommt.

Natürlich können Sie den Jahresvergleich dynamisch machen:

select date_trunc('month', created_at) as mm, count(*) 
from users u 
where subscribed = true and 
     created_at >= date_trunc('year', now()) - interval '1 year' and 
     created_at < date_trunc('year', now()) 
group by date_trunc('month', created_at); 
+0

Vielen Dank für Ihre Antwort ! Was, wenn ich wollte, dass das Ergebnis den tatsächlichen Namen des Monats ausgibt? Anstatt "2017-03-01 00: 00: 00-05" würde das Ergebnis "März" ausgeben. – robertjewell

+0

Sie würden 'to_char (created_at, 'Month')' verwenden. –

Verwandte Themen