Re: Need help with complex query - Mailing list pgsql-sql

From Yasir Malik
Subject Re: Need help with complex query
Date
Msg-id Pine.SGI.4.51.0307091050300.4269107@guinness.cs.stevens-tech.edu
Whole thread Raw
In response to Need help with complex query  (Yasir Malik <ymalik@cs.stevens-tech.edu>)
List pgsql-sql
Mr. Haller
That was what I was exactly looking for.  The guys at
experts-exchange.com or any other website could come up with that answer.
I figured it out without using DISTINCT ON, but the solution was
horrendous.  I have already turned in my assignment, however.  Thank you so
much for your help.  I hope to continue to learn from professionals like you.
Thank you so much,
Yasir

On Wed, 9 Jul 2003, Christoph Haller wrote:

> Date: Wed, 09 Jul 2003 16:46:43 +0200
> From: Christoph Haller <ch@rodos.fzk.de>
> To: ymalik@cs.stevens-tech.edu
> Subject: Re: [SQL] Need help with complex query
>
> Yasir,
> You were quite close already.
> That's exactly what DISTINCT ON was invented for (non-standard
> compliant)
> select DISTINCT ON (cust, prod) cust, prod, mn, dy, yr, quant
> from (select cust, prod, min(quant)
>         from sales
>         group by cust, prod) as x(c, p, q), sales
> where cust = x.c and prod = x.p and quant = x.q  order by cust, prod;
>   cust   |  prod  | mn | dy |  yr  | quant
> ---------+--------+----+----+------+-------
>  Hamming | Milk   |  3 | 15 | 1998 |    47
>  Jones   | Fruits |  3 | 31 | 2001 |    45
>  Knuth   | Bread  |  2 | 21 | 1949 |    13
>  Knuth   | Jam    | 12 | 21 | 2002 |    41
>  Knuth   | Milk   |  2 | 29 | 2000 |    12
>  Kruskal | Jelly  | 11 | 30 | 1999 |     5
> (6 rows)
> Regards, Christoph
>
> >
> > Suppose I have a relation called sales with the following schema:
> > sales-Schema = (cust, prod, mn, dy, yr, quant, st)
> >
> > An instance of the relation would look something like this:
> > cust  prod    mn      dy      yr      quant   st
> > ====  ====    ==      ==      ==      =====   ==
> > Knuth Milk    02      29      2000    12      CA
> > Jones Fruits  03      31      2001    45      WY
> > Knuth Jam     12      21      2002    41      MN
> > Kruskal       Jelly   11      30      1999    12      NJ
> > Hamming       Milk    03      15      1998    47      GA
> > Knuth Milk    02      29      2000    12      CA
> > Kruskal       Jelly   11      30      1999    5       NJ
> > Knuth Milk    06      23      2002    12      CA
> > Knuth Bread   02      21      1949    13      CA
> >
> > Note: The relation can have duplicate rows.
> >
> > Now, I want this query:  For each customer-product combination, find
> the
> > minimum quantity sold along with its respective date.  If there are
> more
> > than one minimum sales quantity for a customer product combination,
> print
> > only one of them.  So the query should return the following:
> >
> > cust  prod    mn      dy      yr      quant
> > ====  ====    ==      ==      ==      =====
> > Jones Fruits  03      31      2001    45
> > Knuth Jam     12      21      2002    41
> > Hamming       Milk    03      15      1998    47
> > Kruskal       Jelly   11      30      1999    5
> > Knuth Milk    06      23      2002    12
> > Knuth Bread   02      21      1949    13
> >
> > I wrote the following query:
> > select cust, prod, mn, dy, yr, quant
> > from (select cust, prod, min(quant)
> >       from sales
> >       group by cust, prod) as x(c, p, q), sales
> > where cust = x.c and prod = x.p and quant = x.q;
> >
> > And I got the following relation:
> > cust  prod    mn      dy      yr      quant
> > ====  ====    ==      ==      ==      =====
> > Knuth Milk    02      29      2000    12
> > Jones Fruits  03      31      2001    45
> > Knuth Jam     12      21      2002    41
> > Hamming       Milk    03      15      1998    47
> > Knuth Milk    02      29      2000    12
> > Kruskal       Jelly   11      30      1999    5
> > Knuth Milk    06      23      2002    12
> > Knuth Bread   02      21      1949    13
> >
> > which is not what I want because the Knuth-Bread combination is
> repeated;
> > I only want one of them.  I have tried many other variations of the
> query,
> > but the best I've done is something like this (by selection distinct
> > quantities out of the above table):
> > cust  prod    mn      dy      yr      quant   st
> > ====  ====    ==      ==      ==      =====   ==
> > Jones Fruits  03      31      2001    45      WY
> > Knuth Jam     12      21      2002    41      MN
> > Hamming       Milk    03      15      1998    47      GA
> > Knuth Milk    02      29      2000    12      CA
> > Kruskal       Jelly   11      30      1999    5       NJ
> > Knuth Milk    06      23      2002    12      CA
> > Knuth Bread   02      21      1949    13      CA
> >
> > Can anyone help me out?  Thanks in advance.
> >
>
>


pgsql-sql by date:

Previous
From: Rod Taylor
Date:
Subject: Re: max length of sql select statement ?
Next
From: markus brosch
Date:
Subject: Re: max length of sql select statement ?