Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / group by / 7 сообщений из 7, страница 1 из 1
23.04.2017, 19:12
    #39442945
nxx
nxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
всегда ли эквивалентен результат ?

1)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
select sum(a2)
from
(
select sum(a) as a2
from t
group by f1, f2, f3
)



2)

Код: plsql
1.
2.
select sum(a)
from t



хочу отрефакторить, но надо же ничего не сломать
я лично думаю что эквивалентно, но мало ли
...
Рейтинг: 0 / 0
23.04.2017, 19:21
    #39442950
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
nxxя лично думаю что эквивалентно, но мало ли

A я лично думаю что "но мало ли".

SY.
...
Рейтинг: 0 / 0
23.04.2017, 19:24
    #39442952
ma1tus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
nxxхочу отрефакторить Работает? ©
...
Рейтинг: 0 / 0
24.04.2017, 09:52
    #39443067
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
nxx,

Предположу, что реальный запрос отличается в "мелочах".
...
Рейтинг: 0 / 0
24.04.2017, 10:06
    #39443080
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
nxx,

могут быть проблемы из-за округления

Код: plsql
1.
2.
3.
4.
5.
6.
7.
with q as (select 1.49999999999999 as a, 'name1' as name from dual union all
select 3.99999999999999 as a, 'name1' from dual union all
select 4.99999999999999 as a, 'name2' from dual union all
select 9.99999999999999 as a, 'name2' from dual)
select sum (a) from (
select sum(a) as a from q
group by name)
...
Рейтинг: 0 / 0
24.04.2017, 10:42
    #39443105
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
Dshedooмогут быть проблемы из-за округленияТы сам немного не в теме истинного округления.
Код: plsql
1.
set numwidth 20

...
Рейтинг: 0 / 0
24.04.2017, 13:11
    #39443237
dbms_photoshop
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
group by
nxx,

Поскольку сложение - коммутативная операция, то стоит ожидать эквивалентных результатов, в отличие от, например, конкатенации.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with t(a,f1,f2,f3) as
(
select 'A',1,1,1 from dual
union all select 'X',1,1,1 from dual
union all select 'B',2,1,1 from dual
union all select 'Y',2,1,1 from dual
)
select listagg(a2, '~') within group (order by a2) x
  from (select listagg(a, '~') within group (order by a) a2
          from t
        group by f1, f2, f3);

with t(a,f1,f2,f3) as
(
select 'A',1,1,1 from dual
union all select 'X',1,1,1 from dual
union all select 'B',2,1,1 from dual
union all select 'Y',2,1,1 from dual
)
select listagg(a, '~') within group (order by a) x from t;


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
X                                                                               
--------------------------------------------------------------------------------
A~X~B~Y                                                                         
1 row selected.

X                                                                               
--------------------------------------------------------------------------------
A~B~X~Y                                                                         
1 row selected.

Однако из-за округления результаты могут отличаться.
number precision + parallel
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / group by / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]