2016-04-15 75 views
0

我的表是這樣的:總和列的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) 

與內部數據exampe這樣的:

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); 

我需要得到SUMM爲每個用戶ID,有很多其中。 postgres中有哪些函數可以快速執行?

+2

首先,你爲什麼要把'x個月後'分成不同的列。這違反了正常形式的規則。你想要做的是一個簡單的總和。你應該谷歌而不是在這裏發佈一個問題。 – 2016-04-15 00:44:27

+1

我同意埃裏克。你應該停下來閱讀關於關係數據的好書。你走錯了路。 –

+0

它只是一個例子,我已經在訪問這個表,我需要將它轉換爲psql和wright psql查詢 –

回答

1

此問題與此stackoverflow問題類似。這是SUM聚合函數的一個簡單使用。

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 

此外,如果用戶想要的所有12列的一個總和然後只需添加列。

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

在這種情況下,您應該發表評論,而不是帶有現有答案鏈接的答案。此外,這個鏈接並不是同一個問題,所以它是不好的。 – Patrick

+0

在我提供了一個代碼示例的情況下,我做出了這個答案。我想貢獻,但沒有足夠的評論(需要50),但我可以做出答案。我認爲問題是一樣的,但同意這兩個例子是不同的。 –