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

Откуда: Киев
Сообщений: 10
Всем хорошего дня.
Есть таблица такого вида:
idvaluetmp
113
122
132
153
21030
22020
23020
25030

Необходимо вывести сумму значений в поле value только для минимального значения в поле tmp.
т.е. примерно это должно выглядеть так:
  select id,
sum (value),
min (tmp)
from t
having min (tmp) = tmp
group by id, tmp

С подзапросом сделать можно, но это "неспортивно" :)
Есть ли вариант решения без подзапроса?
11 окт 13, 10:54    [14955139]     Ответить | Цитировать Сообщить модератору
 Re: Невероятное возможно? или использование having вместе с group by  [new]
varlamovvp
Member

Откуда: Moscow
Сообщений: 298
KaTaFaLk,

KEEP dense rank должно помочь
11 окт 13, 10:58    [14955167]     Ответить | Цитировать Сообщить модератору
 Re: Невероятное возможно? или использование having вместе с group by  [new]
AmKad
Member

Откуда:
Сообщений: 5222
KaTaFaLk,

with s (id, value, tmp) as (
select 1,    1,    3 from dual union all
select 1,    2,    2 from dual union all
select 1,    3,    2 from dual union all
select 1,    5,    3 from dual union all
select 2,    10,    30 from dual union all
select 2,    20,    20 from dual union all
select 2,    30,    20 from dual union all
select 2,    50,    30 from dual)
select id, min(tmp), sum(value) keep (dense_rank first order by tmp) sm
from s
group by id;

        ID   MIN(TMP)         SM
---------- ---------- ----------
         1          2          5
         2         20         50

Затрач.время: 00:00:00.03
11 окт 13, 10:58    [14955173]     Ответить | Цитировать Сообщить модератору
 Re: Невероятное возможно? или использование having вместе с group by  [new]
KaTaFaLk
Member

Откуда: Киев
Сообщений: 10
varlamovvp, AmKad
Спасибо, результат меня устраивает.
вопрос в догонку: насколько целесообразно такое использование в плане ресурсов? т.е. на сколько пострадает план запроса по сравнению с использованием подзапроса?
11 окт 13, 11:06    [14955217]     Ответить | Цитировать Сообщить модератору
 Re: Невероятное возможно? или использование having вместе с group by  [new]
varlamovvp
Member

Откуда: Moscow
Сообщений: 298
KaTaFaLk,

правильный ответ на Ваш вопрос, ИМХО, 42.

Все зависит от размеров таблиц, индексов, настроек оптимизатора и т.п.
Теоретически могут быть случаи, когда план запроса будет один и тот же.
Я бы использовал dense_rank, "красивее"? и ИМХО оптимизатору проще понять
Но это лично мои измышления.
11 окт 13, 12:00    [14955668]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить