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

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
group by
    #39442950
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nxxя лично думаю что эквивалентно, но мало ли

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

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

Предположу, что реальный запрос отличается в "мелочах".
...
Рейтинг: 0 / 0
group by
    #39443080
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
group by
    #39443105
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedooмогут быть проблемы из-за округленияТы сам немного не в теме истинного округления.
Код: plsql
1.
set numwidth 20

...
Рейтинг: 0 / 0
group by
    #39443237
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / group by
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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