2016-04-15 21 views
0

Ich habe Tabelle wie folgt aus:Summe Spalten pro Zeile postgresql

CREATE TABLE public."Payments" 
(
    user_id integer, 
    "1 month later" numeric(19,4), 
    "2 months later" numeric(19,4), 
    "3 months later" numeric(19,4), 
    "4 months later" numeric(19,4), 
    "5 months later" numeric(19,4), 
    "6 months later" numeric(19,4), 
    "7 months later" numeric(19,4), 
    "8 months later" numeric(19,4), 
    "9 months later" numeric(19,4), 
    "10 months later" numeric(19,4), 
    "11 months later" numeric(19,4), 
    "12 months later" numeric(19,4) 

mit Daten innen für exampe wie folgt aus:

INSERT INTO "Payments" ("user_id", "1 month later", "2 months later", "3 months later", "4 months later", "5 months later", "6 months later", "7 months later", "8 months later", "9 months later", "10 months later", "11 months later", "12 months later") VALUES (134329, 190, 190, 190, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); 

Ich brauche summ für jede Benutzer-ID zu bekommen, gibt es eine Menge von ihnen. Gibt es eine Funktion in Postgres, die das schnell erledigt?

+2

Erstens, warum brechen Sie "x Monate später" in verschiedene Spalten. Dies verletzt die Regeln der normalen Form. Was du versuchst zu tun, ist eine einfache Summe. Sie sollten dies googlen, anstatt hier eine Frage zu stellen. –

+1

Ich stimme Eric zu. Sie sollten aufhören und ein gutes Buch über relationale Daten lesen. Du gehst den falschen Weg. –

+0

es ist nur ein Beispiel, ich habe bereits diese Tabelle in Zugriff, muss ich es in psql und wright psql Abfrage –

Antwort

1

Diese Frage ist ähnlich zu dieser stackoverflow Frage. Es ist eine einfache Verwendung der SUM-Aggregatfunktion.

how to group by and return sum row in Postgres

SELECT user_id, SUM("1 month later") as "1 month later",SUM("2 months later") as "2 months later",SUM("3 months later") as "3 months later",SUM("4 months later") as "4 months later",SUM("5 months later") as "5 months later",SUM("6 months later") as "6 months later",SUM("7 months later") as "7 months later",SUM("8 months later") as "8 months later",SUM("9 months later") as "9 months later",SUM("10 months later") as "10 months later",SUM("11 months later") as "11 months later", SUM("12 months later") as "12 months later" 
FROM public.payments 
GROUP BY user_id 

Zusätzlich, wenn der Benutzer dann fügen Sie einfach die Spalten eine Summe aller 12 Spalten will.

SELECT user_id, "1 month later" + "2 months later" + "3 months later" + "4 months later" + "5 months later" + "6 months later" + "7 months later" + "8 months later" + "9 months later" + "10 months later" + "11 months later" + "12 months later") as allMonthsLater FROM public.payments 
+0

konvertieren In diesem Fall sollten Sie einen Kommentar, keine Antwort mit einem Link zu einer vorhandenen Antwort machen. Außerdem ist die Verbindung nicht die gleiche Frage, also ist es nicht gut. – Patrick

+0

In dem Fall, dass ich ein Code-Beispiel zur Verfügung gestellt habe, habe ich dies eine Antwort gegeben. Ich wollte etwas beitragen, habe aber nicht genug Punkte, um einen Kommentar abzugeben (50 benötigt), aber ich kann eine Antwort geben. Ich behaupte, dass die Frage die gleiche ist, aber stimme zu, dass die beiden Beispiele unterschiedlich sind. –