Re: how to group by a joined query?

Поиск
Список
Период
Сортировка
От Weiping He
Тема Re: how to group by a joined query?
Дата
Msg-id 3F52BF52.5020106@zhengmai.com.cn
обсуждение исходный текст
Ответ на how to group by a joined query?  (Weiping He <laser@zhengmai.com.cn>)
Список pgsql-general
Weiping He wrote:

> suppose I've got two table:
>
> laser_uni=# \d t1
>     Table "public.t1"
> Column | Type | Modifiers
> --------+------+-----------
> name   | text |
> addr   | text |
>
> laser_uni=# \d t2
>      Table "public.t2"
> Column |  Type   | Modifiers
> --------+---------+-----------
> name   | text    |
> len    | integer |
> of     | integer |
>
> and I want to use join to select out data and then group by one
> column, like this:
>
> laser_uni=# select t1.name, t1.addr, t2.name, t2.len, t2.of from t1
> right join t2 on t1.name=t2.name group by t2.name;
> ERROR:  Attribute t1.name must be GROUPed or used in an aggregate
> function
>
> seems the I must gorup all those fields:
>
> laser_uni=# select t1.name as t1name, t1.addr as t1addr, t2.name as
> t2name, t2.len, t2.of from t1 right join t2 on t1.name=t2.name group
> by t1.name, t1.addr, t2.name, t2.len, t2.of;
> t1name | t1addr | t2name | len | of
> --------+--------+--------+-----+----
>        |        | henry  |   2 |  4
>        |        | laser  |   4 |  4
> (2 rows)
>
> is it specification compliant or postgresql specific?
>
> Thanks
>
reread the docs, seems use DISTINCE ON clause solved my problem:

select distinct on( t2.len) t1.name as t1name, t1.addr as t1addr,
t2.name as t2name, t2.len, t2.of from t1 right join t2 on t1.name=t2.name;


Thanks

Laser


В списке pgsql-general по дате отправления:

Предыдущее
От: mgarriss
Дата:
Сообщение: Getting last inserted SERIAL
Следующее
От: Bruce Momjian
Дата:
Сообщение: Re: About GPL and proprietary software