как выполнить группировку

_Владимир__
Дата: 22.02.2007 09:14:51
select product_name,
      [b] (select t.country_name from country t where t.country_id = country_id) as country_name[/b]
from product
group by product_name, country_name
как выполнить группировку по второму полю?

сортировка понятно можно и так
order by 2
, а вот группировка так не катит
_Владимир__
Дата: 22.02.2007 09:20:59
можно сделать и так
select product_name,
         country_name
from(
select product_name,
       (select t.country_name from country t where t.country_id = country_id) as country_name
from product)
group by product_name, country_name

но хотелось бы без подзапросов, есть вариант или нет
Бабичев Сергей
Дата: 22.02.2007 09:23:21
Изменить форму запроса с вида "запрос со скалярным коррелировнным подзапросом во фразе select" к виду "запрос со встроенным представлением", либо в вид "запрос с JOIN + GROUP BY".
Как вариант - тупо группировать по country_id.
И, кстати, исходный запрос в принципе некорректен... В нем не соблюдены (или не учтены?) принципы "локальных и глобальных имен объектов"
Бабичев Сергей
Дата: 22.02.2007 09:24:46
_Владимир__
можно сделать и так
select product_name,
         country_name
from(
select product_name,
       (select t.country_name from country t where t.country_id = country_id) as country_name
from product)
group by product_name, country_name

но хотелось бы без подзапросов, есть вариант или нет
Сделай совсем в лоб:
select product_name,
       (select t.country_name from country t where t.country_id = p.country_id) as country_name
from product p
group by product_name, p.country_id
Elic
Дата: 22.02.2007 09:24:53
_Владимир__
как выполнить группировку по второму полю?
Группируют не по "полям", а по выражениям, которые повторяют во фразе group by
Но здесь достаточно простого outer-join-а вместо скалярного подзапроса.
_Владимир__
from country t where t.country_id = country_id[/src]
Этот запрос содержит грубую логическую ошибку и выполнится только в редких экзотических случаях
_Владимир__
Дата: 22.02.2007 09:25:59
И, кстати, исходный запрос в принципе некорректен... В нем не соблюдены (или не учтены?) принципы "локальных и глобальных имен объектов"

Это я приел пример навскидку, много моментов когда не хочется писать подзапросы, для группировки, думал, что есть какойто стандартный.
Бабичев Сергей
Дата: 22.02.2007 09:26:19
Совсем без подзапросов вот так:
select p.product_name,
         t.country_name 
from product p, country t 
where  t.country_id = t.country_id
group by product_name, country_name
_Владимир__
Дата: 22.02.2007 09:29:54
нет так нельзя жестко привязывать, если у продукта не стоит страна, то он просто его не выведет
Elic
Дата: 22.02.2007 09:32:38
Бабичев Сергей
where  t.country_id = t.country_id
Elic
Но здесь достаточно простого outer-join-а
Бабичев Сергей
Дата: 22.02.2007 09:38:53
Elic
Бабичев Сергей
where  t.country_id = t.country_id
Elic
Но здесь достаточно простого outer-join-а
Про джойн я сказал ещё в первом своем ответе. А заменить форму джойна с внутренней на внешнюю уже оставил на совести автора.
Но судя по всему, я переоценил его способности:
_Владимир__
нет так нельзя жестко привязывать, если у продукта не стоит страна, то он просто его не выведет