powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
25 сообщений из 71, страница 2 из 3
List?
    #39815467
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinИ зачем требует group by column_id , когда надо order by column_id?Потому что формальный язык не должен додумывать за тебя, ошибся ли ты в сортировке или группировке.
...
Рейтинг: 0 / 0
List?
    #39815476
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinПожалуйста поподробнее. Где в моём примере группа и сортировка внутри группы? У меня есть сортировка исходного запроса и всё, а больше мне (в данном случае) ничего не надо. И зачем требует group by column_id , когда надо order by column_id?

Группировка бывает явная при указании GROUP BY или неявная при использовании агрегатных функций. В SYBASE LIST это:

Код: plsql
1.
LIST function [Aggregate].


Посему:

Код: plsql
1.
2.
3.
4.
select LIST(column_name)
from all_tab_columns
where table_name = 'ESTABLISHMENT'
order by column_id



вначале сгруппирует все строки в одну группу и сконкатенирует все имена полей таблицы ESTABLISHMENT в произвольном порядке. В результате получим ровно одну строку. Да, формально мы можем добавить order by column_id но согласись сортировка одной строки занятие ну ооочень занимательное . И никто не говорил тебе нужно group by column_id. Тебе нужно order by column_id при конкатенации имен полей. А это указывается в самой LIST, а не в ORDER BY запроса:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
IST function [Aggregate]
Returns a delimited list of values for every row in a group.

Syntax
LIST(
[ALL | DISTINCT] string-expresssion
[, 'delimiter-string']
[ORDER BY order-by-expression [ ASC | DESC ], ... ] )



Т.e. твоя хотлка выглядит так:

Код: plsql
1.
2.
3.
select LIST(column_name order by column_id)
from all_tab_columns
where table_name = 'ESTABLISHMENT'



SY.
...
Рейтинг: 0 / 0
List?
    #39815512
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYДа, формально мы можем добавить order by column_id но согласись сортировка одной строки занятие ну ооочень занимательное .
Никакой сортировки внутри строки нет. Идёт просто конкатенация поля из запроса.
SYИ никто не говорил тебе нужно group by column_id.
а вот:
Код: plsql
1.
within group (order by column_id)


SYТебе нужно order by column_id при конкатенации имен полей. А это указывается в самой LIST, а не в ORDER BY запроса
Да не хочу я строку сортировать. Строку кроме как по алфавиту и не от сортируешь. Мне достаточно сортировки в запросе
...
Рейтинг: 0 / 0
List?
    #39815525
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinне хочу я строку сортировать. Строку кроме как по алфавиту и не от сортируешь. Мне достаточно сортировки в запросе
Иногда лучше жевать, чем говорить (с)
...
Рейтинг: 0 / 0
List?
    #39815547
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Потому что формальный язык не должен додумывать за тебя, ошибся ли ты в сортировке или группировке.
А у меня вообще нет группировки, вернее, группировка ВСЕ. Мне кажется она должна быть по умолчанию. Ведь есть же она в некоторых других аггрегатных функциях, например AVG:

Код: plsql
1.
2.
3.
select avg (column_id) 
from all_tab_columns
where table_name = 'ESTABLISHMENT'



Можно, кончно, добавить что-то типа
Код: plsql
1.
group by 1


а потом долго думать что это было и почему работает
...
Рейтинг: 0 / 0
List?
    #39815556
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Victor Cookin,

Про детерминизм результата группировки не думал? А avg, sum, count и тд он есть.
...
Рейтинг: 0 / 0
List?
    #39815561
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinДа не хочу я строку сортировать. Строку кроме как по алфавиту и не от сортируешь. Мне достаточно сортировки в запросе

Пoследняя попытка. ORDER BY выполняется последним и сортирует результат всех предыдущих шагов. Т.e. шаг пeрвый это выборка всех строк где table_name = 'ESTABLISHMENT'. Шаг второй это конкатенация значений поля column_name всех выбранных строк. Т.е. результат второго шага это одна строка. Вот к ней и будет применен шаг трeтий - ORDER BY который и произведет бессмысленную сортировку. Так-что ORDER BY в твоем SELECTе - не пришей кобыле хвост. Результат что с ним, что без него это конкатенация значений имен полей таблицы ESTABLISHMENT в произвольном порядке.

Victor CookinСтроку кроме как по алфавиту и не от сортируешь.

И тут ты не догоняешь. ORDER BY внутри LIST cортирует ROWS в группе. И в отличие от statement level этот ORDER BY выполнится как часть второго шага. Например:

Код: plsql
1.
LIST(column_name order by column_id)



сконкатенирует имена полей таблицы ESTABLISHMENT в том порядке в котором они заданы в таблице. А

Код: plsql
1.
LIST(column_name order by data_type)



сконкатенирует имена полей таблицы ESTABLISHMENT в порядке их типа данных.

SY.
...
Рейтинг: 0 / 0
List?
    #39815599
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xtenderПро детерминизм результата группировки не думал? А avg, sum, count и тд он есть.За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования. С count distinct тоже есть нюансы.
...
Рейтинг: 0 / 0
List?
    #39815627
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinа где уже не обязательна?
в Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0
ошибки не выдает
21887033

формально такое поведение можно считать и багом
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(job, ',')  l
from emp 
group by deptno

MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN,CLERK
PRESIDENT,MANAGER,CLERK
MANAGER,ANALYST,ANALYST,CLERK,CLERK



....
stax
...
Рейтинг: 0 / 0
List?
    #39815747
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-xtenderПро детерминизм результата группировки не думал? А avg, sum, count и тд он есть.За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования.Как так? -2-С count distinct тоже есть нюансы.А это как?
...
Рейтинг: 0 / 0
List?
    #39815759
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad-2-За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования.Как так?
Потеря точности
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
SQL> with a as (select 2/3 as x from dual connect by level <= 10000)
  2     , b as (select 1/3 as x from dual connect by level <= 10000)
  3  select to_char(sum(x))
  4    from (select * from a union all select * from b)
  5  ;

TO_CHAR(SUM(X))
----------------------------------------
9999.99999999999999999999999999999999995

1 row selected.

SQL> with a as (select 2/3 as x from dual connect by level <= 10000)
  2     , b as (select 1/3 as x from dual connect by level <= 10000)
  3  select to_char(sum(x))
  4    from (select * from b union all select * from a)
  5  ;

TO_CHAR(SUM(X))
----------------------------------------
10000.0000000000000000000000000000000001

1 row selected.

...
Рейтинг: 0 / 0
List?
    #39815771
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Многие тут говорят про сортировку одной строки и забывают про 00979
...
Рейтинг: 0 / 0
List?
    #39815772
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicAmKadпропущено...
Как так?Потеря точности
А с сортировками есть ньюанс в виде ограничения на длину ключа сортировки.
...
Рейтинг: 0 / 0
List?
    #39815793
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousElicпропущено...
Потеря точности
А с сортировками есть ньюанс в виде ограничения на длину ключа сортировки.

в доке ньюанс не описали (видать считают что и так понятно)

The order_by_clause determines the order in which the concatenated values are returned. The function is deterministic only if the ORDER BY column list achieved unique ordering.

....
stax
...
Рейтинг: 0 / 0
List?
    #39815796
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxв доке ньюанс не описали (видать считают что и так понятно)

The order_by_clause determines the order in which the concatenatedТы уже выпал из темы.
...
Рейтинг: 0 / 0
List?
    #39815803
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad-2-С count distinct тоже есть нюансы.А это как?
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
with t(s, x) as (select 'ab',2 from dual union all select 'bc',1 from dual union all select 'cd',3 from dual)
select 'S' sx, count(distinct testdistinct(s)) cd from (select s from t order by s)
union all
select 'X' sx, count(distinct testdistinct(s)) cd from (select s from t order by x);

S         CD
- ----------
S          2
X          1
...
Рейтинг: 0 / 0
List?
    #39815810
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicТы уже выпал из темы.
да я не очень то и впадал в тему

просто интересно
1) как поведет себя сортировка в случае MAX_STRING_SIZE = EXTENDED
2) почему "неоптимально" (с запасом) реализовали ON OVERFLOW TRUNCATE

ps
мне ето не надо, просто по старинке интересно

.....
stax
...
Рейтинг: 0 / 0
List?
    #39815850
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxМногие тут говорят про сортировку одной строки и забывают про 00979

Перечитай мой отвeт тебе-же:

SYПосему ORDER BY в примере от Victor Cookin произведет сортировку одной строки т.к. неявная группировкa а при явной нибо вылетит с "not a GROUP BY expression" либо отсортирует уже сгруппированные строки (если поле в ORDER BY присутствует в GROUP BY) .


SY.
...
Рейтинг: 0 / 0
List?
    #39815902
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-
Код: plsql
1.
testdistinct

А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?
...
Рейтинг: 0 / 0
List?
    #39815965
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad-2-
Код: plsql
1.
testdistinct

А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?Состояния нет. Сравнение значений детерминировано = строки имеют общий символ:
ab = bc
bc = cd
...
Рейтинг: 0 / 0
List?
    #39816056
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПoследняя попытка. ORDER BY выполняется последним и сортирует результат всех предыдущих шагов.

а я не хочу никаких сортировок последним шагом, последним шагом я хочу ТОЛЬКО выполнение аггрегатной функции. По-моему, это логично. Так делается НЕ в Оракле и, по-моему, такой вариант - именно то, что часто и нужно. А Вы всё о том, как это делается в Оракле. Да зарадибога

SYРезультат что с ним, что без него это конкатенация значений имен полей таблицы ESTABLISHMENT в произвольном порядке.
Ну да, а в Sybase не в произвольном.

SYVictor CookinСтроку кроме как по алфавиту и не от сортируешь. И тут ты не догоняешь. ORDER BY внутри LIST cортирует ROWS в группе. И в отличие от statement level этот ORDER BY выполнится как часть второго шага
Ну вот. Есть строка (и больше ничего - перечитайте мой текст). Какие ещё ROWS?

Point: Почему не сделать аггрегатные функции именно аггрегатными - то есть не трогать Recodset под ним?
...
Рейтинг: 0 / 0
List?
    #39816105
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinPoint
Вот интересно, Victor Cookin - это толстый тролль или реальный неадекват?
...
Рейтинг: 0 / 0
List?
    #39816126
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinПочему не сделать аггрегатные функции именно аггрегатными - то есть не трогать Recodset под ним?Какие функции обязывают "трогать"? Знаю first/last, cume_dist, percentile_ и всякие _rank. В чем их смысл, как не в сортировке?
...
Рейтинг: 0 / 0
List?
    #39816141
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousВот интересно, Victor Cookin - это толстый тролль или реальный неадекват?Однохренственно. Тратить именно на него время - бессмысленно.
...
Рейтинг: 0 / 0
List?
    #39816151
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-AmKadпропущено...
А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?Состояния нет. Сравнение значений детерминировано = строки имеют общий символ:
ab = bc
bc = cd
предыдущее значение разве ето не состояние?

.....
stax
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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