pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: msi77 <msi77@yandex.ru>
To: Relyea, Mike <mike.relyea@xerox.com>
Cc: pgsql-sql@postgresql.org <pgsql-sql@postgresql.org>
Subject: Re: Lowest 2 items per
Date: Sat, 02 Jun 2012 17:56:58 +0400
Message-ID: <299741338645418@web11h.yandex.ru> (raw)
In-Reply-To: <AF7D9319B29A0242A33C3BF843BD31330EFB8CCE@USA7061MS03.na.xerox.net>
References: <AF7D9319B29A0242A33C3BF843BD31330EFB8CCE@USA7061MS03.na.xerox.net>

A few of approaches to solve this problem:

http://sql-ex.com/help/select16.php

01.06.2012, 18:34, "Relyea, Mike" <Mike.Relyea@xerox.com>:
> I need a little help putting together a query.  I have the tables listed
> below and I need to return the lowest two consumables (ranked by cost
> divided by yield) per printer, per color of consumable, per type of
> consumable.
>
> CREATE TABLE printers
> (
>   printerid serial NOT NULL,
>   make text NOT NULL,
>   model text NOT NULL,
>   CONSTRAINT printers_pkey PRIMARY KEY (make , model ),
>   CONSTRAINT printers_printerid_key UNIQUE (printerid ),
> )
>
> CREATE TABLE consumables
> (
>   consumableid serial NOT NULL,
>   brand text NOT NULL,
>   partnumber text NOT NULL,
>   color text NOT NULL,
>   type text NOT NULL,
>   yield integer,
>   cost double precision,
>   CONSTRAINT consumables_pkey PRIMARY KEY (brand , partnumber ),
>   CONSTRAINT consumables_consumableid_key UNIQUE (consumableid )
> )
>
> CREATE TABLE printersandconsumables
> (
>   printerid integer NOT NULL,
>   consumableid integer NOT NULL,
>   CONSTRAINT printersandconsumables_pkey PRIMARY KEY (printerid ,
> consumableid ),
>   CONSTRAINT printersandconsumables_consumableid_fkey FOREIGN KEY
> (consumableid)
>       REFERENCES consumables (consumableid) MATCH SIMPLE
>       ON UPDATE CASCADE ON DELETE CASCADE,
>   CONSTRAINT printersandconsumables_printerid_fkey FOREIGN KEY
> (printerid)
>       REFERENCES printers (printerid) MATCH SIMPLE
>       ON UPDATE CASCADE ON DELETE CASCADE
> )
>
> I've pulled together this query which gives me the lowest consumable per
> printer per color per type, but I need the lowest two not just the first
> lowest.
>
> SELECT printers.make, printers.model, consumables.color,
> consumables.type, min(cost/yield) AS cpp
> FROM printers
> JOIN printersandconsumables ON printers.printerid =
> printersandconsumables.printerid
> JOIN consumables ON consumables.consumableid =
> printersandconsumables.consumableid
> WHERE consumables.cost Is Not Null
> AND consumables.yield Is Not Null
> GROUP BY printers.make, printers.model, consumables.color,
> consumables.type
> ORDER BY make, model;
>
> After doing a google search I didn't come up with anything that I was
> able to use so I'm asking you fine folks!
>
> Mike
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql



view thread (15+ messages)  latest in thread

Message-ID: <299741338645418@web11h.yandex.ru>
Permalink:  ../299741338645418@web11h.yandex.ru/
Also on:    postgresql.org/message-id/299741338645418@web11h.yandex.ru

 · 

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: msi77@yandex.ru, mike.relyea@xerox.com
  Subject: Re: Lowest 2 items per
  In-Reply-To: <299741338645418@web11h.yandex.ru>

* 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