2016-04-15 41 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),但我可以做出答案。我认为问题是一样的,但同意这两个例子是不同的。 –