Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: List?  [new]
-2-
Member

Откуда:
Сообщений: 14850
Victor Cookin
И зачем требует group by column_id , когда надо order by column_id?
Потому что формальный язык не должен додумывать за тебя, ошибся ли ты в сортировке или группировке.
20 май 19, 18:41    [21889126]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9563
Victor Cookin
Пожалуйста поподробнее. Где в моём примере группа и сортировка внутри группы? У меня есть сортировка исходного запроса и всё, а больше мне (в данном случае) ничего не надо. И зачем требует group by column_id , когда надо order by column_id?


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

LIST function [Aggregate].

Посему:

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 запроса:

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. твоя хотлка выглядит так:

select LIST(column_name order by column_id)
from all_tab_columns
where table_name = 'ESTABLISHMENT'


SY.
20 май 19, 18:55    [21889137]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
SY
Да, формально мы можем добавить order by column_id но согласись сортировка одной строки занятие ну ооочень занимательное .

Никакой сортировки внутри строки нет. Идёт просто конкатенация поля из запроса.
SY
И никто не говорил тебе нужно group by column_id.

а вот:
within group (order by column_id)

SY
Тебе нужно order by column_id при конкатенации имен полей. А это указывается в самой LIST, а не в ORDER BY запроса

Да не хочу я строку сортировать. Строку кроме как по алфавиту и не от сортируешь. Мне достаточно сортировки в запросе
20 май 19, 20:27    [21889203]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17580
Victor Cookin
не хочу я строку сортировать. Строку кроме как по алфавиту и не от сортируешь. Мне достаточно сортировки в запросе

Иногда лучше жевать, чем говорить (с)
20 май 19, 20:49    [21889218]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
-2-
Потому что формальный язык не должен додумывать за тебя, ошибся ли ты в сортировке или группировке.

А у меня вообще нет группировки, вернее, группировка ВСЕ. Мне кажется она должна быть по умолчанию. Ведь есть же она в некоторых других аггрегатных функциях, например AVG:

select avg (column_id) 
from all_tab_columns
where table_name = 'ESTABLISHMENT'


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

а потом долго думать что это было и почему работает
20 май 19, 23:15    [21889269]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
xtender
Member

Откуда: Мск
Сообщений: 5216
Victor Cookin,

Про детерминизм результата группировки не думал? А avg, sum, count и тд он есть.
20 май 19, 23:50    [21889281]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9563
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 выполнится как часть второго шага. Например:

LIST(column_name order by column_id)


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

LIST(column_name order by data_type)


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

SY.
21 май 19, 00:12    [21889289]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
-2-
Member

Откуда:
Сообщений: 14850
xtender
Про детерминизм результата группировки не думал? А avg, sum, count и тд он есть.
За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования. С count distinct тоже есть нюансы.
21 май 19, 07:07    [21889351]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1955
Victor Cookin
а где уже не обязательна?

в Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0
ошибки не выдает
21887033

формально такое поведение можно считать и багом
select listagg(job, ',')  l
from emp 
group by deptno

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


....
stax
21 май 19, 09:08    [21889399]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
AmKad
Member

Откуда:
Сообщений: 5049
-2-
xtender
Про детерминизм результата группировки не думал? А avg, sum, count и тд он есть.
За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования.
Как так?
-2-
С count distinct тоже есть нюансы.
А это как?
21 май 19, 12:31    [21889623]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29197
AmKad
-2-
За avg и sum я бы не вписывался. Результат может зависеть от порядка суммирования.
Как так?
+ Потеря точности
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.
21 май 19, 12:58    [21889650]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 52330
Многие тут говорят про сортировку одной строки и забывают про 00979
21 май 19, 13:18    [21889674]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17580
Elic
AmKad
пропущено...
Как так?
Потеря точности

А с сортировками есть ньюанс в виде ограничения на длину ключа сортировки.
21 май 19, 13:18    [21889675]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1955
andrey_anonymous
Elic
пропущено...
Потеря точности

А с сортировками есть ньюанс в виде ограничения на длину ключа сортировки.


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

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
21 май 19, 13:48    [21889709]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29197
Stax
в доке ньюанс не описали (видать считают что и так понятно)

The order_by_clause determines the order in which the concatenated
Ты уже выпал из темы.
21 май 19, 13:50    [21889712]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
-2-
Member

Откуда:
Сообщений: 14850
AmKad
-2-
С count distinct тоже есть нюансы.
А это как?
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
21 май 19, 13:56    [21889722]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1955
Elic
Ты уже выпал из темы.

да я не очень то и впадал в тему

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

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

.....
stax
21 май 19, 14:00    [21889734]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9563
andreymx
Многие тут говорят про сортировку одной строки и забывают про 00979


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

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


SY.
21 май 19, 14:59    [21889794]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
AmKad
Member

Откуда:
Сообщений: 5049
-2-
testdistinct
А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?
21 май 19, 16:22    [21889873]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
-2-
Member

Откуда:
Сообщений: 14850
AmKad
-2-
testdistinct
А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?
Состояния нет. Сравнение значений детерминировано = строки имеют общий символ:
ab = bc
bc = cd
21 май 19, 17:53    [21889970]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 711
SY
Пoследняя попытка. ORDER BY выполняется последним и сортирует результат всех предыдущих шагов.


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

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

Ну да, а в Sybase не в произвольном.

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

Ну вот. Есть строка (и больше ничего - перечитайте мой текст). Какие ещё ROWS?

Point: Почему не сделать аггрегатные функции именно аггрегатными - то есть не трогать Recodset под ним?
21 май 19, 22:44    [21890100]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17580
Victor Cookin
Point

Вот интересно, Victor Cookin - это толстый тролль или реальный неадекват?
22 май 19, 01:30    [21890159]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
-2-
Member

Откуда:
Сообщений: 14850
Victor Cookin
Почему не сделать аггрегатные функции именно аггрегатными - то есть не трогать Recodset под ним?
Какие функции обязывают "трогать"? Знаю first/last, cume_dist, percentile_ и всякие _rank. В чем их смысл, как не в сортировке?
22 май 19, 06:59    [21890190]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 29197
andrey_anonymous
Вот интересно, Victor Cookin - это толстый тролль или реальный неадекват?
Однохренственно. Тратить именно на него время - бессмысленно.
22 май 19, 07:47    [21890210]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1955
-2-
AmKad
пропущено...
А что у этого зверя под капотом? Сохранение параметров с последующим их сравнением?
Состояния нет. Сравнение значений детерминировано = строки имеют общий символ:
ab = bc
bc = cd

предыдущее значение разве ето не состояние?

.....
stax
22 май 19, 08:19    [21890230]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Oracle Ответить