Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 как выполнить группировку  [new]
_Владимир__
Member

Откуда:
Сообщений: 356
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 фев 07, 09:14    [3819884]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
_Владимир__
Member

Откуда:
Сообщений: 356
можно сделать и так
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 фев 07, 09:20    [3819912]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Изменить форму запроса с вида "запрос со скалярным коррелировнным подзапросом во фразе select" к виду "запрос со встроенным представлением", либо в вид "запрос с JOIN + GROUP BY".
Как вариант - тупо группировать по country_id.
И, кстати, исходный запрос в принципе некорректен... В нем не соблюдены (или не учтены?) принципы "локальных и глобальных имен объектов"
22 фев 07, 09:23    [3819922]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
_Владимир__
можно сделать и так
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
22 фев 07, 09:24    [3819933]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Elic
Member

Откуда:
Сообщений: 29991
_Владимир__
как выполнить группировку по второму полю?
Группируют не по "полям", а по выражениям, которые повторяют во фразе group by
Но здесь достаточно простого outer-join-а вместо скалярного подзапроса.
_Владимир__
from country t where t.country_id = country_id[/src]
Этот запрос содержит грубую логическую ошибку и выполнится только в редких экзотических случаях
22 фев 07, 09:24    [3819935]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
_Владимир__
Member

Откуда:
Сообщений: 356
И, кстати, исходный запрос в принципе некорректен... В нем не соблюдены (или не учтены?) принципы "локальных и глобальных имен объектов"

Это я приел пример навскидку, много моментов когда не хочется писать подзапросы, для группировки, думал, что есть какойто стандартный.
22 фев 07, 09:25    [3819941]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Совсем без подзапросов вот так:
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 фев 07, 09:26    [3819945]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
_Владимир__
Member

Откуда:
Сообщений: 356
нет так нельзя жестко привязывать, если у продукта не стоит страна, то он просто его не выведет
22 фев 07, 09:29    [3819969]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Elic
Member

Откуда:
Сообщений: 29991
Бабичев Сергей
where  t.country_id = t.country_id
Elic
Но здесь достаточно простого outer-join-а
22 фев 07, 09:32    [3819994]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Elic
Бабичев Сергей
where  t.country_id = t.country_id
Elic
Но здесь достаточно простого outer-join-а
Про джойн я сказал ещё в первом своем ответе. А заменить форму джойна с внутренней на внешнюю уже оставил на совести автора.
Но судя по всему, я переоценил его способности:
_Владимир__
нет так нельзя жестко привязывать, если у продукта не стоит страна, то он просто его не выведет
22 фев 07, 09:38    [3820045]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
_Владимир__
Member

Откуда:
Сообщений: 356
так я тебя и поправил, что так как сделал ты так нельзя в данном случае.
22 фев 07, 09:43    [3820077]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
_Владимир__
так я тебя и поправил, что так как сделал ты так нельзя в данном случае.
Меня поправлять не нужно. Нужно учиться корректно задавать вопросы...
22 фев 07, 09:46    [3820117]     Ответить | Цитировать Сообщить модератору
 Re: как выполнить группировку  [new]
Volder
Member

Откуда: Москва
Сообщений: 474
Бабичев Сергей
ну иногда поправить все-таки можно))

Elic
Бабичев Сергей
where  t.country_id = t.country_id
22 фев 07, 16:44    [3823868]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить