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.

Reply via email to