From: | "Igor Neyman" <ineyman(at)perceptron(dot)com> |
---|---|
To: | "John R Pierce" <pierce(at)hogranch(dot)com>, <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: help with SQL join |
Date: | 2010-02-12 13:45:53 |
Message-ID: | F4C27E77F7A33E4CA98C19A9DC6722A20588657F@EXCHANGE.corp.perceptron.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> -----Original Message-----
> From: John R Pierce [mailto:pierce(at)hogranch(dot)com]
> Sent: Thursday, February 11, 2010 3:01 PM
> To: pgsql-general(at)postgresql(dot)org
> Subject: Re: help with SQL join
>
> Neil Stlyz wrote:
> > Now... here is the problem I am having... the above SQL query is
> > retrieving results from one table: sales I have another
> table called
> > customers with a couple of fields (customerid, and customername are
> > two of the fields).
> > I want to join on the customerid in both tables to retrieve the
> > customername in the query.
> > So I need the results to look something like this:
> >
> > customerid | customername |
> > TODAYS_USERS | LAST 7 DAYS |
> LAST 30 DAYS
> > bigint | varchar |
> > bigint | bigint
>
> > | bigint
> >
> --------------------------------------------------------------
> ------------------------------------------------------------------
> > 8699 | Joe Smith |
> 1
> > |
> > 1 | 1
> > 8700 | Sara Olson |
> 1
> > | 12
> > | 17
> > 8701 | Mike Jones |
> 3
> > |
> > 5 | 19
> >
> > Can someone show me how to use a JOIN with the above SQL
> Statement? I
> > need to bring the customername field into the query from the other
> > table and I have been having issues writting the query... can this
> > even be done?
>
> something like...
>
> SELECT results.customerid, c.customername, count(distinct
> count1) AS "TODAYS_USERS", count(distinct count2) AS "LAST 7
> DAYS" , count(distinct count3) AS "LAST 30 DAYS"
> FROM (SELECT distinct case when s.modified >=
> '2010-02-11' then s.modelnumber else null end as count1,
> case when s.modified >= '2010-02-04' then
> s.modelnumber else null end as count2,
> case when s.modified >= '2010-01-11' then
> s.modelnumber else null end as count3, s.customerid
> FROM sales as s WHERE s.modelnumber LIKE 'GH77%')
> AS results
> JOIN customers as c ON (results.customerid = c.customerid)
> GROUP BY results.customerid
>
One correction: you should "group" on all non-aggregate columns in your
"select" list, i.e.:
SELECT results.customerid, c.customername, count(distinct
count1) AS "TODAYS_USERS", count(distinct count2) AS "LAST 7
DAYS" , count(distinct count3) AS "LAST 30 DAYS"
FROM (SELECT distinct case when s.modified >=
'2010-02-11' then s.modelnumber else null end as count1,
case when s.modified >= '2010-02-04' then
s.modelnumber else null end as count2,
case when s.modified >= '2010-01-11' then
s.modelnumber else null end as count3, s.customerid
FROM sales as s WHERE s.modelnumber LIKE 'GH77%')
AS results
JOIN customers as c ON (results.customerid = c.customerid)
GROUP BY results.customerid, c.customername
Igor Neyman
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2010-02-12 14:53:51 | Re: pg_dump: SQL command failed |
Previous Message | Richard Huxton | 2010-02-12 12:47:24 | Re: Weeding out unused user created database objects, could I use pg_catalog? |