Re: Possible to do this in one query?
От | Andrew G. Hammond |
---|---|
Тема | Re: Possible to do this in one query? |
Дата | |
Msg-id | 20020327145802.GA7777@xyzzy.dhs.org обсуждение исходный текст |
Ответ на | Possible to do this in one query? ("John Oakes" <john@networkproductions.net>) |
Список | pgsql-sql |
On Tue, Mar 26, 2002 at 01:22:41PM -0500, John Oakes wrote: > I have a table with a column that contains fail codes. These codes are 1-9. > I need to get a count of each of the codes. Right now I have separate > queries: > > select count(*) from tablename > where failcode = '1'; > > If I use GROUP BY it obviously doesn't get the count for codes that don't > exist. I need to have 0 returned though so I have a listing of all 9 fail > codes and their total, even if it is zero. I tried UNION like this: > > select count(*) from tablename > where failcode = '1'; > UNION > select count(*) from tablename > where failcode = '2'; > > etc, but it too excludes the codes that have a count of zero. Right now I > have resorted to using 9 separate queries. Is there a way to do this with > one? Thank you! You need a table of failcodes first: CREATE TABLE failcodes ( failcode INTEGER PRIMARY KEY,description TEXT ); -- populate it: INSERT INTO failcodes ( 1, 'Attacked by mob of angry kittens' ); -- ... INSERT INTO failcodes ( 9, 'Wrong phase of moon' ); SELECT coalesce(count, 0) FROM ( SELECT failcode FROM failcodes NATURAL LEFT OUTER JOIN SELECT count (*) FROM tablenameGROUP BY failcode ); Or, be a sneaky bastard and add a fake record for each failcode, and then count(*) - 1. :) -- Andrew G. Hammond mailto:drew@xyzzy.dhs.org http://xyzzy.dhs.org/~drew/ 56 2A 54 EF 19 C0 3B 43 72 69 5B E3 69 5B A1 1F 613-389-5481 5CD3 62B0 254B DEB1 86E0 8959 093E F70A B457 84B1 "To blow recursion you must first blow recur" -- me
В списке pgsql-sql по дате отправления: