pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Gary Stainburn <gary.stainburn@ringways.co.uk>
To: Tomasz Myrta <jasiek@klaster.net>
Cc: pgsql-sql@postgresql.org
Subject: Re: efficient count/join query
Date: Fri, 7 Feb 2003 12:09:55 +0000
Message-ID: <200302071209.55330.gary.stainburn@ringways.co.uk> (raw)
In-Reply-To: <3E438F0F.5000301@klaster.net>
References: <200302071007.28697.gary.stainburn@ringways.co.uk>
	<3E438F0F.5000301@klaster.net>

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     




view thread (8+ messages)  latest in thread

Message-ID: <200302071209.55330.gary.stainburn@ringways.co.uk>
Permalink:  ../200302071209.55330.gary.stainburn@ringways.co.uk/
Also on:    postgresql.org/message-id/200302071209.55330.gary.stainburn@ringways.co.uk

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: gary.stainburn@ringways.co.uk, jasiek@klaster.net
  Subject: Re: efficient count/join query
  In-Reply-To: <200302071209.55330.gary.stainburn@ringways.co.uk>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox