Oh, I see, thanks for your quick reply.
On Fri, Dec 28, 2012 at 3:47 PM, Jov <zhao6...@gmail.com> wrote: > > > 2012/12/28 wd <w...@wdicc.com> > >> hi, >> >> wd_test=# \d t1 >> Table "public.t1" >> Column | Type | Modifiers >> --------+---------+------------------------------------------------- >> id | integer | not null default nextval('t1_id_seq'::regclass) >> tag | text | >> >> wd_test=# select * from t1; >> id | tag >> ----+----- >> 1 | a >> 2 | a >> 3 | b >> 4 | c >> 5 | b >> (5 rows) >> >> ---- this sql will not group by the case result. >> wd_test=# select case t1.tag when 'a' then '1' else '0' end as tag, >> count(*) from t1 group by tag; >> > > here the group by key tag is t1.tag,not the tag int the select list > > >> tag | count >> -----+------- >> 0 | 1 >> 0 | 2 >> 1 | 2 >> (3 rows) >> >> ---- this sql will group by the case result. >> wd_test=# select case t1.tag when 'a' then '1' else '0' end as ttag, >> count(*) from t1 group by ttag; >> > here the ttag is the select list ttag,it is equal with group by 1. > > >> ttag | count >> ------+------- >> 0 | 3 >> 1 | 2 >> (2 rows) >> > > http://www.postgresql.org/docs/9.2/static/sql-select.html#SQL-GROUPBY > > >> GROUP BY will condense into a single row all selected rows that share >> the same values for the grouped expressions. expression can be an input >> column name, or the name or ordinal number of an output column (SELECT list >> item), or an arbitrary expression formed from input-column values. *In >> case of ambiguity, a GROUP BY name will be interpreted as an >> input-column name rather than an output column name.* > > > so it is not a bug. >