Re: efficient count/join query - Mailing list pgsql-sql
From | Gary Stainburn |
---|---|
Subject | Re: efficient count/join query |
Date | |
Msg-id | 200302071209.55330.gary.stainburn@ringways.co.uk Whole thread Raw |
In response to | Re: efficient count/join query (Tomasz Myrta <jasiek@klaster.net>) |
Responses |
Re: efficient count/join query
|
List | pgsql-sql |
On Friday 07 Feb 2003 10:48 am, Tomasz Myrta wrote: > Gary Stainburn wrote: > > Hi folks, > > > > I've got two tables, first a history table containing tallies for > > staff/jobs prior to going live, and second a roster table showing date, > > diagram, job with one record per person per job per day. the tables are: > > > > create table history ( > > hsid int4 not null references staff(sid), > > hjid int4 not null references jobs(jid), > > hcount int4, > > primary key (hsid,hjid)); > > > > create table roster ( > > rodate date not null, > > rogid int4 not null references diagrams(gid), > > rojid int4 not null references jobs(jid), > > rosid int4 references staff(sid), > > primary key (rodate, rogid, rojid)); > > > > What's the best/quickest/cheapest way to create a view in the format of > > the history table but including the details from the roster table for all > > records prior to today. > > > > I've been looking at some form of sub-select/join scheme but as some will > > only exist on the history and some will only exist on the roster while > > many will exist on both. > > Hello again. > > What if they exists in both tables - you need only one row result? > If yes, you should use FULL OUTER JOIN and COALESCE. > > select > coalesce(hjid,rjid) as jid, > coalesce(hsid,rsid) as sid, > hcount, > rodate, > rogid > from > history > full outer join roster on (hjid=rjid and hsid=rosid) > > Using other names for the same field in other tables comes again - > If you have the same name for jid and sid, you wouldn't need coalesce. > > Regards, > Tomasz Myrta Hi Tomasz, I don't think you understand what I mean. The history table could be thought of as the following SQL statement if the data had actually existed. This table actually represents a manually input summary of the pre-computerised data. insert into history select rosid, rojid, count(*) from roster_staff group by rssid, rsgsid; If I have a history of hsid | hjid | hcount ------+------+-------- 1 | 2 | 3 1 | 3 | 1 5 | 5 | 4 6 | 5 | 3 9 | 4 | 4 14 | 5 | 4 and I have a roster of rodate | rogid | rojid | rosid -----------+-------+-------+------- 2003-02-15 | 1 | 2 | 1 2003-02-15 | 1 | 5 | 5 2003-02-16 | 1 | 5 | 1 I want my view to show hsid | hjid | hcount ------+------+-------- 1 | 2 | 4 1 | 3 | 1 1 | 5 | 1 5 | 5 | 5 6 | 5 | 3 9 | 4 | 4 14 | 5 | 4 -- Gary Stainburn This email does not contain private or confidential material as it may be snooped on by interested government parties for unknown and undisclosed purposes - Regulation of Investigatory Powers Act, 2000