group by

queryProg
Дата: 15.09.2004 17:20:14
если писать вот так
select t1.cityid,count(t1.cityid),t2.en_name from public.cities as t2 LEFT JOIN hotel.hotel_tour as t1 ON t1.cityid=t2.id GROUP BY t1.cityidHAVING count(t1.cityid)>0

то выдает ошибку ERROR: column t2.en_city does not exist


а если
select t2.en_name,t1.cityid,count(t1.cityid) from public.cities as t2 LEFT JOIN hotel.hotel_tour as t1 ON t1.cityid=t2.id GROUP BY t1.cityid,t2.en_name HAVING count(t1.cityid)>0

то работает
Сосответственно у меня вопрос по этой теме... то ли я плохо знаю стандарт ,то ли он работате не по стандарту ..но получается чтобы вывести название столбцов нужно объявить их в group by
хотя вот в мускуле первая конструкция работает

помогите люди ,я запутался
igor2222
Дата: 15.09.2004 18:46:22
select t1.cityid,
count(t1.cityid),
t2.en_name
from public.cities as t2 LEFT JOIN hotel.hotel_tour as t1
ON t1.cityid=t2.id
GROUP BY t1.cityid, t2.en_name
HAVING count(t1.cityid)>0

Не может работать иначе!
queryProg
Дата: 15.09.2004 18:53:58
То есть нужно перечислять все столбцы ,которые хочешь вывести или лучше отказать от этого и использовать вложенные запросы ?
mwolf
Дата: 15.09.2004 19:25:06
queryProg
То есть нужно перечислять все столбцы ,которые хочешь вывести или лучше отказать от этого и использовать вложенные запросы ?


Да
igor2222
Дата: 15.09.2004 19:27:14
Любая функция агрегирования подразумевает группировку по остальным полям, выводимым в Селекте. Если не хочешь в GROUP BY перечислять эти поля, то примени и к ним какую-либо агрегатную функцию (например min) и посмотришь что получится.
В оракле правда есть аналитические функции, но это уже совсем другая история...
queryProg
Дата: 16.09.2004 10:05:36
спасибо всем