Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1XmugH-0005Hy-24 for pgsql-sql@arkaria.postgresql.org; Sat, 08 Nov 2014 01:19:09 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1XmugF-0005Q6-To for pgsql-sql@arkaria.postgresql.org; Sat, 08 Nov 2014 01:19:07 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1XmugD-0005Px-Lj for pgsql-sql@postgresql.org; Sat, 08 Nov 2014 01:19:05 +0000 Received: from post.visena.com ([46.226.10.50]) by magus.postgresql.org with esmtps (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1Xmug9-00086R-99 for pgsql-sql@postgresql.org; Sat, 08 Nov 2014 01:19:04 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=visena.com; s=20141101.wh; h=Content-Type:MIME-Version:Subject:Message-ID:To:From:Date; bh=4TQVlGFYMDXXguKXq9x02+P0g0jariqop5eqUGvZW1c=; b=ZjMHglltItEXY6gSwpv4+uaOUykHEZFte4PAgFM6DA9EdAbFzgvmB9YX6GCxuWO0cEkcWUDGBm9WmIPs5ow9t8z/UBrkJbPHhjdl9IEBplFxGapP8w72vKhiRoaFO2IlryQAOvOooImH5YWxt66nnlTmTbi+jHv9CNUzwdhJaZY=; Received: from [10.0.1.10] (helo=tc7-visena.wh.internal.visena.com) by post.visena.com with esmtp (Exim 4.82) (envelope-from ) id 1Xmug3-0002hb-UY for pgsql-sql@postgresql.org; Sat, 08 Nov 2014 02:18:59 +0100 Received: from localhost ([127.0.0.1] helo=tc7-visena.wh.internal.visena.com) by tc7-visena.wh.internal.visena.com with esmtp (Exim 4.82) (envelope-from ) id 1Xmug3-0000sS-Rx for pgsql-sql@postgresql.org; Sat, 08 Nov 2014 02:18:55 +0100 Date: Sat, 8 Nov 2014 02:18:55 +0100 (CET) From: Andreas Joseph Krogh To: pgsql-sql@postgresql.org Message-ID: Subject: Using aggregates to get sums and partial sums in one query MIME-Version: 1.0 X-Mailer: Visena Mail 1.9.0-SNAPSHOT X-Spam-Score: -0.7 X-Spam-Report: SpamAssasin (score=-0.7, required 5.0 ALL_TRUSTED=-1, HTML_MESSAGE=0.001, URIBL_RHS_DOB=0.276) X-Pg-Spam-Score: -2.6 (--) Content-Type: multipart/related; boundary="----=_Part_136_1173990271.1415409535699" List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-sql Precedence: bulk Sender: pgsql-sql-owner@postgresql.org ------=_Part_135_1997420025.1415409535699 Content-Type: multipart/related; boundary="----=_Part_136_1173990271.1415409535699" ------=_Part_136_1173990271.1415409535699 Content-Type: multipart/alternative; boundary="----=_Part_137_666852356.1415409535721" ------=_Part_137_666852356.1415409535721 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi all. =C2=A0 I'm trying to retrieve some aggregated sums in one query. = =C2=A0 This is a=20 short example of what I'm trying to achieve. =C2=A0 The schema (not very go= od names,=20 I know): drop table if exists t_member_budget; drop table if exists t_membe= r;=20 drop table if existst_project; create table t_project( id integer primary k= ey,=20 namevarchar not null ); create table t_member( id integer primary key, pers= on_id integer not null, project_id integer not null REFERENCES t_project(id), rol= e=20 varchar not null, years_experience integer not null ); create table=20 t_member_budget(id integer PRIMARY KEY, member_id integer not null REFERENC= ES=20 t_member(id), month date not null, amount integer not null ); insert into= =20 t_project(id, name) values(1, 'P1'); insert into t_project(id, name) values= (2,=20 'P2'); -- Person 1,2,3 is member of project 1. Person 1 has 2 roles - so 2= =20 entriesinsert into t_member(id, person_id, project_id, role, years_experien= ce)=20 values(1, 1, 1, 'LEADER', 3); -- person 1 member of project 1 as LEADER ins= ert=20 intot_member(id, person_id, project_id, role, years_experience) values(2, 1= , 1,=20 'MEMBER', 7); -- person 1 member of project 1 as MEMBER insert into t_membe= r(id, person_id, project_id, role, years_experience) values(3, 2, 1, 'LEADER', 1)= ; --=20 person 2 member of project 1insert into t_member(id, person_id, project_id,= role ,years_experience) values(4, 3, 1, 'LEADER', 6); -- person 3 member of proj= ect 1 -- Person 3 is member of project 2insert into t_member(id, person_id, proje= ct_id ,role, years_experience) values(5, 3, 2, 'LEADER', 5); -- person 3 member o= f=20 project 2 insert into t_member_budget(id, member_id, month, amount) values(= 1, 1, '2014-01-01'::date, 2); -- person 1 in project 1 as LEADER insert into=20 t_member_budget(id, member_id, month, amount) values(2, 1, '2014-02-01'::da= te, 3 );-- person 1 in project 1 as LEADER insert into t_member_budget(id, member= _id,=20 month, amount) values(3, 1, '2014-03-01'::date, 2); -- person 1 in project = 1 as=20 LEADERinsert into t_member_budget(id, member_id, month, amount) values(4, 2= ,=20 '2014-01-01'::date, 2); -- person 1 in project 1 as MEMBER insert into=20 t_member_budget(id, member_id, month, amount) values(5, 3, '2014-01-01'::da= te, 2 );-- person 2 in project 1 insert into t_member_budget(id, member_id, month= ,=20 amount) values(6, 4, '2014-01-01'::date, 2); -- person 3 in project 1 inser= t=20 intot_member_budget(id, member_id, month, amount) values(7, 5, '2014-01-01'= :: date, 4); -- person 3 in project 2 insert into t_member_budget(id, member_i= d,=20 month, amount) values(8, 5, '2014-01-01'::date, 2); -- person 3 in project = 2 =C2=A0=20 Then what I'm trying to get out is this dataset: =C2=A0 =C2=A0name | years_= exp_in_project=20 | num_roles | unique_members | sum_budget_amount ------+----------------------+-----------+----------------+---------------= ---- =C2=A0P1=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 17 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 13 =C2=A0P2=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 |=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 6=20 =C2=A0 This query kind of illustrates what I'm after, but gives the wrong r= esults,=20 of course: select p.name, sum(years_experience) as years_exp_in_project, co= unt( role) as num_roles , count(distinct m.person_id) as unique_members, sum(g.a= mount )as sum_budget_amount from t_project p JOIN t_member m ON m.project_id =3D = p.id=20 joint_member_budget g ON g.member_id =3D m.id group by p.id order by p.name= ; =20 This gives me: =C2=A0 =C2=A0 =C2=A0name | years_exp_in_project | num_roles = | unique_members |=20 sum_budget_amount ------+----------------------+-----------+----------------+---------------= ---- =C2=A0P1=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 23 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 6 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 13 =C2=A0P2=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 10 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 6= =20 =C2=A0 =C2=A0 Which obviously is wrong. =C2=A0 I know I can craft a query w= hich uses=20 sub-queries and CTE to get the desired results, but I hope there is cleaner= =20 solution. Any idea how to craft a neat query for this without sub-queries o= r=20 CTE? Will Windowing-functions help out here? =C2=A0 Thanks. =C2=A0 -- Andre= as Joseph Krogh CTO / Partner - Visena AS Mobile: +47 909 56 963 andreas@visena.com=20 www.visena.com =20 ------=_Part_137_666852356.1415409535721 Content-Type: text/html;charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi all.
=C2=A0
I'm trying to retrieve some aggregated sums in one query.
=C2=A0
This is a short example of what I'm trying to achieve.
=C2=A0
The schema (not very good names, I know):
dr=
op table if exists t_membe=
r_budget;
drop table if exists t_member;
drop table if exists t_project;

create table t_proje=
ct(
    id integer primary key,
    name varchar not null
);

create table t_membe=
r(
    id integer primary key,
    person_id integer not null,
    project_id integer not null REFERENCES t_project(id),
    role varchar not null,
    years_experience integer not null
);

create table t_membe=
r_budget(
    id integer PRIMARY KEY,
    member_id integer not null REFERENCES t_member(id),
    month date not null,
    amount integer not null
);

insert into t_projec=
t(id, name) values(1, =
'P1');
insert into t_projec=
t(id, name) values(2, =
'P2');

-- Person 1,2,3 is member =
of project 1. Person 1 has 2 roles - so 2 entries=20
insert into t=
_member(id, person_id, project_id, role, years_experience)=20
  values(1, 1, 1, 'LEADER', 3); -- person 1 member of project 1 =
as LEADER
insert into t=
_member(id, person_id, project_id, role, years_experience)
  values(2, 1, 1, 'MEMBER', 7); -- person 1 member of project 1 =
as MEMBER
insert into t_member=
(id, person_id, project_id, role, years_experience)=20
  values(3, 2, 1, 'LEADER', 1); -- person 2 member of project 1
insert into t=
_member(id, person_id, project_id, role, years_experience)=20
  values(4, 3, 1, 'LEADER', 6); -- person 3 member of project 1

-- Person 3 is member of p=
roject 2=20
insert into t=
_member(id, person_id, project_id, role, years_experience)=20
  values(5, 3, 2, 'LEADER', 5); -- person 3 member of project 2

insert into t_member=
_budget(id, member_id, month, amount) values(1, 1, =
'2014-01-01'::date, 2); -- person 1 in project 1 as LEADER
insert into t=
_member_budget(id, <=
span style=3D"color:#660e7a;font-weight:bold;">member_id, month, amount) values(2, 1, '2014-02-01'::date, 3); -- person 1 in project 1 as LEADER
insert into t=
_member_budget(id, <=
span style=3D"color:#660e7a;font-weight:bold;">member_id, month, amount) values(3, 1, '2014-03-01'::date, 2); -- person 1 in project 1 as LEADER
insert into t=
_member_budget(id, <=
span style=3D"color:#660e7a;font-weight:bold;">member_id, month, amount) values(4, 2, '2014-01-01'::date, 2); -- person 1 in project 1 as MEMBER
insert into t=
_member_budget(id, <=
span style=3D"color:#660e7a;font-weight:bold;">member_id, month, amount) values(5, 3, '2014-01-01'::date, 2); -- person 2 in project 1
insert into t=
_member_budget(id, <=
span style=3D"color:#660e7a;font-weight:bold;">member_id, month, amount) values(6, 4, '2014-01-01'::date, 2); -- person 3 in project 1

insert into t_member=
_budget(id, member_id, month, amount) values(7, 5, =
'2014-01-01'::date, 4); -- person 3 in project 2
insert into t_member_=
budget(id, member_id, month, amount) values(8, 5, '2014-01-01'::=
date, 2); -- person 3 in project 2
=C2=A0
Then what I'm trying to get out is this dataset:
=C2=A0
=C2=A0name = | years_exp_in_project | num_roles | unique_members | sum_budget_amount
------+----------------------+-----------+----------------+----------------= ---
=C2=A0P1=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 17 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 13
=C2=A0P2=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 |=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0 6
=C2=A0
This query kind of illustrates what I'm after, but gives the wrong res= ults, of course:
se=
lect p.name, sum(years_exp=
erience) as years_exp=
_in_project, count(role) as num_roles
    , count(distinct m.person_id) as unique_members, sum(g.amount) as sum_budget_amount
from t_project p JOIN t_member m ON m.project_id =3D p.id
    join t_member_budget g ON g.member_id =3D m.id
group by p.id
order by p.name;
This gives me:
=C2=A0
=C2=A0
=C2=A0name = | years_exp_in_project | num_roles | unique_members | sum_budget_amount
------+----------------------+-----------+----------------+----------------= ---
=C2=A0P1=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 23 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 6 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 13
=C2=A0P2=C2=A0=C2=A0 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 10 |=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2 |=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 |=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 6<= /span>
=C2=A0
=C2=A0
Which obviously is wrong.
=C2=A0
I know I can craft a query which uses sub-queries and CTE to get the d= esired results, but I hope there is cleaner solution.
Any idea how to craft a neat query for this without sub-queries or CTE= ? Will Windowing-functions help out here?
=C2=A0
Thanks.
=C2=A0
--
Andrea= s Joseph Krogh
CTO / Partner<= /span> - Visena AS
Mobile: +47 90= 9 56 963
=3D""
------=_Part_137_666852356.1415409535721-- ------=_Part_136_1173990271.1415409535699 Content-Type: image/png Content-Transfer-Encoding: base64 Content-Disposition: inline Content-ID: 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 ------=_Part_136_1173990271.1415409535699-- ------=_Part_135_1997420025.1415409535699--