powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
71 сообщений из 71, показаны все 3 страниц
List?
    #39814330
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда уже на Oracle будет нормальная аггрегатная функция List , как в Sybase
...
Рейтинг: 0 / 0
List?
    #39814361
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin,

"Доку не читай, сразу на форум пости"(с)

Давно уже есть такая функция.
...
Рейтинг: 0 / 0
List?
    #39814362
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookin,

либо указывайте конкретно - чем LIST в сайбесе лучше ораклового LISTAGGA-а и чего лично вам не хватает в LISTAGG-е
...
Рейтинг: 0 / 0
List?
    #39814378
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinКогда уже на Oracle будет нормальная аггрегатная функция List , как в SybaseШёл бы ты, бездарь, на откуда пришёл.
...
Рейтинг: 0 / 0
List?
    #39814392
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справедливости ради стоит отметить, что приведенная топикстартером функция вражеской датабазы возвращает LONG VARCHAR , что несколько превышает максимальный размер возращаемого listagg ораколового varchar2.
Но, как все мы знаем, вышесказанное мною не отменяет возможности получить список элементов в строковом виде условно неограниченного размера средствами Oracle без PL/SQL и listagg.
...
Рейтинг: 0 / 0
List?
    #39814398
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна и чего лично вам не хватает в LISTAGG-е

unique


ps
в новых версиях з WITHIN улучшили

если есть сортировка, то добавить уникальность не так уж и сложно
.....
stax
...
Рейтинг: 0 / 0
List?
    #39814414
AserYZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadСправедливости ради стоит отметить, что приведенная топикстартером функция вражеской датабазы возвращает LONG VARCHAR , что несколько превышает максимальный размер возращаемого listagg ораколового varchar2.
Но, как все мы знаем, вышесказанное мною не отменяет возможности получить список элементов в строковом виде условно неограниченного размера средствами Oracle без PL/SQL и listagg.

В соседней сходной ветке уже выяснили, что после 12 версии Ваш аргумент не аргумент и Оракл удлинил свой варчар2 до 32к что вполне хватает для разного вида рукожопства членов кружка CLOBофобии. Это конечно не 512 терабайт, но то ли ещё будет.
...
Рейтинг: 0 / 0
List?
    #39814425
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AserYZВаш аргумент не аргумент и Оракл удлинил свой варчар2 до 32к что вполне хватает для разного вида рукожопства членов кружка CLOBофобии.Замена фобии на более другую фобию не есть аргумент против аргумента.
...
Рейтинг: 0 / 0
List?
    #39814431
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AserYZ,

Отбросив вопрос о целесообразности склеивания строк в сторону, 32к - это больше, чем 4к, всего в 8 раз. До 512 терабайт еще сколько-то порядков, что не делает listagg аналогом функции list. О чем я, силу своей дотошности, не смог не заметить.
...
Рейтинг: 0 / 0
List?
    #39814457
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxЩукина Анна и чего лично вам не хватает в LISTAGG-еuniqueunique формально нет в синтаксисе
Код: plaintext
1.
LISTAGG( [ ALL ] [ DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP ] (order_by_clause) [OVER query_partition_clause]
но оно работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(unique to_char(mod(level, 3)), ',') within group (order by null) v193
from dual
connect by level<=10;

V193   
-----
0,1,2


AmKadО чем я, силу своей дотошности, не смог не заметить.Тогда нужно было дотошнить до более полного сравнения:
- типы аргумента,
- размер результата,
- ограничения по сортировке,
- параметры overflow,
- over().
...
Рейтинг: 0 / 0
List?
    #39814461
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Тогда нужно было дотошнить до более полного сравнения:Я сегодня скудно позавтракал, поэтому содержимого желудка хватило только на сравнение размеров результата. А про overflow вообще только что узнал.
...
Рейтинг: 0 / 0
List?
    #39814493
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Staxпропущено...
uniqueunique формально нет в синтаксисе
Код: plaintext
1.
LISTAGG( [ ALL ] [ DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
  [ WITHIN GROUP ] (order_by_clause) [OVER query_partition_clause]
но оно работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(unique to_char(mod(level, 3)), ',') within group (order by null) v193
from dual
connect by level<=10;

V193   
-----
0,1,2




мододцы (доку не успели поправить)


в Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production Version 18.3.0.0.0
еще не работает
Код: plsql
1.
2.
3.
4.
5.
select listagg(unique job, ',') within group (order by null)
from emp 
group by deptnoORA-30482: DISTINCT option not allowed for this function

ORA-30482: DISTINCT option not allowed for this function



ps
по диаграме сортировка обязательна но без нее работает
Код: plsql
1.
2.
3.
4.
5.
6.
7.
select listagg(job, ',') --within group (order by null)
from emp 
group by deptno

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



....
stax
...
Рейтинг: 0 / 0
List?
    #39814499
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad А про overflow вообще только что узнал.

добавіть, добавили
но реализовали неакуратно (мой админ бы не принял)

....
stax
...
Рейтинг: 0 / 0
List?
    #39814751
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он хотел как в Лиспе.

Код: python
1.
(list x y z)
...
Рейтинг: 0 / 0
List?
    #39814791
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется вот этого:
Код: plsql
1.
2.
3.
4.
select LIST(column_name)
from all_tab_columns
where table_name = 'ESTABLISHMENT'
order by column_id



вместо

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



Код: sql
1.
 within group 

убирать пробовал, но "ORA-02000: missing WITHIN keyword"
Oracle 12
...
Рейтинг: 0 / 0
List?
    #39814793
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinХочется
Это от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
...
Рейтинг: 0 / 0
List?
    #39814795
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinХочется вот этого:
Код: plsql
1.
2.
3.
4.
select LIST(column_name)
from all_tab_columns
where table_name = 'ESTABLISHMENT'
order by column_id


И что в sybase выдаст этот запрос?
...
Рейтинг: 0 / 0
List?
    #39814965
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в мсскл назвали string_agg
Все что-то своё выдумавыют
...
Рейтинг: 0 / 0
List?
    #39814994
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxв мсскл назвали string_agg
Все что-то своё выдумавыют

Суть не в названии а в том что это функция агрегатная. Т.e. сначала агрегация (GROUP BY по умолчанию) и только потом ORDER BY. Посему ORDER BY в примере от Victor Cookin произведет сортировку одной строки т.к. неявная группировкa а при явной нибо вылетит с "not a GROUP BY expression" либо отсортирует уже сгруппированные строки (если поле в ORDER BY присутствует в GROUP BY). Но в любом случае этот ORDER BY не имеет ничего общего c ORDER BY при группировке указываемый в WITHIN GROUP. Другое дело ORACLE мог бы сделать кляузу WITHIN GROUP(ORDER BY 1) кляузой по умолчанию - куда меньше буковок если порядок не важен.

SY
...
Рейтинг: 0 / 0
List?
    #39815067
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY ORACLE мог бы сделать кляузу WITHIN GROUP(ORDER BY 1) кляузой по умолчанию - куда меньше буковок если порядок не важен.1 или не 1, но что-то по-умолчанию есть
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select listagg(dummy) v193
from dual
connect by level<=5
group by mod(level, 2);

V193
----
XXX
XX
...
Рейтинг: 0 / 0
List?
    #39815078
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-1 или не 1, но что-то по-умолчанию есть

Ну значит внял Oracle просьбам трудящихся:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SQL> select  version
  2    from  v$instance
  3  /

VERSION
-----------------
12.2.0.1.0

SQL> select listagg(dummy) v193
  2  from dual
  3  connect by level<=5
  4  group by mod(level, 2);
select listagg(dummy) v193
                      *
ERROR at line 1:
ORA-02000: missing WITHIN keyword


SQL>



SY.
...
Рейтинг: 0 / 0
List?
    #39815201
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Ну значит внял Oracle просьбам трудящихся:

SY.

в 18-ке кляуза WITHIN GROUP еще обязательна, но без нее ошибки уже не выдает
https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/LISTAGG.html#GUID-B6E50D8E-F467-425B-9436-F7F8BF38D466

.....
stax
...
Рейтинг: 0 / 0
List?
    #39815417
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousЭто от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
Во многих случаях нужно просто взять результат запроса и получить именно лист, т.е. одно значение. При этом сам запрос может быть, понятно, довольно сложным. И визуально усложнять его при ненадобности этого делать - это нехорошо.

Staxв 18-ке кляуза WITHIN GROUP еще обязательна, но без нее ошибки уже не выдает
а где уже не обязательна?
...
Рейтинг: 0 / 0
List?
    #39815425
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinandrey_anonymousЭто от непонимания.
Включите в Ваш пример group by и попробуйте переосмыслить.
Во многих случаях нужно просто взять результат запроса и получить именно лист, т.е. одно значение. При этом сам запрос может быть, понятно, довольно сложным. И визуально усложнять его при ненадобности этого делать - это нехорошо.
Нехорошо путать теплое с мягким, а именно - сортировку итоговой выборки и сортировку внутри группы, итогом которой станет одна строка итоговой выборки.
...
Рейтинг: 0 / 0
List?
    #39815439
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousНехорошо путать теплое с мягким, а именно - сортировку итоговой выборки и сортировку внутри группы, итогом которой станет одна строка итоговой выборки.

Пожалуйста поподробнее. Где в моём примере группа и сортировка внутри группы? У меня есть сортировка исходного запроса и всё, а больше мне (в данном случае) ничего не надо. И зачем требует group by column_id , когда надо order by column_id?
...
Рейтинг: 0 / 0
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
List?
    #39816161
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinа я не хочу никаких сортировок последним шагом, последним шагом я хочу ТОЛЬКО выполнение аггрегатной функции. По-моему, это логично. Так делается НЕ в Оракле и, по-моему, такой вариант - именно то, что часто и нужно. А Вы всё о том, как это делается в Оракле. Да зарадибога

Point: Почему не сделать аггрегатные функции именно аггрегатными - то есть не трогать Recodset под ним?

как выглядит решение в sybase такой задачки?

для каждого отдела сформировать через запятую список (list) сотрудников (первый с самой большой ЗП, если равные то и по ТН), результат отсортировать по номерах отделов по убыванию.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10
      7566 JONES      MANAGER         7839 02.04.81       2975                    20
      7902 FORD       ANALYST         7566 03.12.81       3000                    20
      7876 ADAMS      CLERK           7788 12.01.83       1100                    20
      7369 SMITH      CLERK           7902 17.12.80        800                    20
      7788 SCOTT      ANALYST         7566 09.12.82       3000                    20
      7521 WARD       SALESMAN        7698 22.02.81       1250        500         30
      7844 TURNER     SALESMAN        7698 08.09.81       1500                    30
      7499 ALLEN      SALESMAN        7698 20.02.81       1600        300         30
      7900 JAMES      CLERK           7698 03.12.81        950                    30
      7698 BLAKE      MANAGER         7839 01.05.81       2850                    30
      7654 MARTIN     SALESMAN        7698 28.09.81       1250       1400         30

результат

    DEPTNO F
---------- --------------------------------------------------
        30 BLAKE,MARTIN,ALLEN,WARD,TURNER,JAMES
        20 SCOTT,FORD,JONES,ADAMS,SMITH
        10 KING,CLARK,MILLER



Point: аггрегатные функции именно аггрегатные - если не нужно то они не трогают Recodset под ним
напр sum

....
stax
...
Рейтинг: 0 / 0
List?
    #39816687
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Именно такой таблицы у меня нет, но есть аналогичная loc_user, где сотрудники (loc_u_code) привязаны к различным офисам(loc_u_loc) и у них есть некий уровень доступа (loc_u_level) (аналог З/П)

Вот запрос:
Код: sql
1.
2.
3.
4.
select loc_u_loc, list (loc_u_code order by loc_u_level desc, loc_u_code) a
from loc_user
group by loc_u_loc
order by loc_u_loc desc



Необходимо добавить, что в 99 процентах случаев мне достаточно запросов, который я сформулировал в начале топика.
И для данного запроса предпочёл бы, чтобы синтаксис был бы

Код: sql
1.
2.
3.
4.
select loc_u_loc, list (loc_u_code) a
from loc_user
group by loc_u_loc
order by loc_u_loc desc, loc_u_level desc, loc_u_code



Я понимаю формальную некорректность такого синтаксиса, но ведь он легко и однозначно трансформируется в

Код: sql
1.
2.
3.
4.
5.
6.
7.
select loc_u_loc, list (a) from (
select loc_u_loc, loc_u_level, list (loc_u_code) a
from loc_user
group by loc_u_loc, loc_u_level
order by loc_u_loc desc, loc_u_level desc) z
group by loc_u_loc
order by loc_u_loc desc



который прекрасно работает

результат
Код: plaintext
1.
2.
3.
Row	loc_u_loc	list(z.a)
1	7011	AA006,AA030,AD041,AG063,AK022,...
2	7005	AA006,AA030,AD035,AD041,AG063,AK022,...
3	7003	AA006,AA030,AD035,AD041,AG063,AK022,...
...
Рейтинг: 0 / 0
List?
    #39816697
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinStax,

Именно такой таблицы у меня нет, но есть аналогичная loc_user, где сотрудники (loc_u_code) привязаны к различным офисам(loc_u_loc) и у них есть некий уровень доступа (loc_u_level) (аналог З/П)

Вот запрос:
Код: sql
1.
2.
3.
4.
select loc_u_loc, list (loc_u_code order by loc_u_level desc, loc_u_code) a
from loc_user
group by loc_u_loc
order by loc_u_loc desc




в оракле так же
чутку начудили с синтаксисом
вынесли за скобки order by с within group (order by column_id)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SQL> select deptno
  2  ,listagg(ename,',') WITHIN GROUP (ORDER BY sal+nvl(comm,0) desc,empno) f
  3  from emp e
  4  group by deptno
  5  order by deptno desc
  6  /

    DEPTNO F
---------- --------------------------------------------------
        30 BLAKE,MARTIN,ALLEN,WARD,TURNER,JAMES
        20 SCOTT,FORD,JONES,ADAMS,SMITH
        10 KING,CLARK,MILLER



Victor CookinЯ понимаю формальную некорректность такого синтаксиса, но ведь он легко и однозначно трансформируется в

Код: sql
1.
2.
3.
4.
5.
6.
7.
select loc_u_loc, list (a) from (
select loc_u_loc, loc_u_level, list (loc_u_code) a
from loc_user
group by loc_u_loc, loc_u_level
order by loc_u_loc desc, loc_u_level desc) z
group by loc_u_loc
order by loc_u_loc desc



который прекрасно работает


странно
для group by loc_u_loc, loc_u_level
list должен сформироватся в разрезе не только офиса но и доступа

....
stax
...
Рейтинг: 0 / 0
List?
    #39816699
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinЯ понимаю формальную некорректность такого синтаксиса
Раз понимаете - воспользуйтесь корректным:
Код: plsql
1.
2.
3.
4.
5.
select loc_u_loc
     , listagg(loc_u_code, ',') within group (order by loc_u_level desc) l
  from loc_user
 group by loc_u_loc
 order by loc_u_loc desc
...
Рейтинг: 0 / 0
List?
    #39816702
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinЯ понимаю формальную некорректность такого синтаксиса, но ведь он легко и однозначно трансформируется вПодай патент, рационализатор, самому ораклу и заработай кучу бабла.
Но однозначно видна только твоя узколобость.
...
Рейтинг: 0 / 0
List?
    #39816708
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousРаз понимаете - воспользуйтесь корректным

А сортировка по loc_u_code - по умолчанию, как в Sybase?
...
Рейтинг: 0 / 0
List?
    #39816709
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinandrey_anonymousРаз понимаете - воспользуйтесь корректным
А сортировка по loc_u_code
как закажете, так и будет:
Код: plsql
1.
within group (order by loc_u_level desc, loc_u_code)
...
Рейтинг: 0 / 0
List?
    #39816714
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinandrey_anonymousРаз понимаете - воспользуйтесь корректным

А сортировка по loc_u_code - по умолчанию, как в Sybase?

в оракле (если брать по диаграме) кляуза сортировки обязательно, что неудобно
если сортировать не надо, то указывали фикцию напр WITHIN GROUP (ORDER BY null)

в 18-й версии без WITHIN GROUP ошибки не выдает

ps
так как нет clob-а, добавили кляузу ON OVERFLOW (как на меня не учень удачно)

....
stax
...
Рейтинг: 0 / 0
List?
    #39816744
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicНо однозначно видна только твоя узколобость.
Чего злой такой?
...
Рейтинг: 0 / 0
List?
    #39816746
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinElicНо однозначно видна только твоя узколобость.
Чего злой такой?не обращай внимания
Он такой и есть, много знает, но злой
...
Рейтинг: 0 / 0
List?
    #39816873
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor CookinЧего злой такой?Сперва встречный вопрос: откуда такая упрямая тупость? Делов-то - играть по правилам, а не плакаться в монастыре со своим уставом.
...
Рейтинг: 0 / 0
List?
    #39816938
alex-ls
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxОн такой и есть, много знает, но злой
потому и злой, что много знает, был бы глупый - был бы добрый
...
Рейтинг: 0 / 0
List?
    #39817356
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicСперва встречный вопрос
Ты еврей? Тогда поверю, что много знаешь.
Elicоткуда такая упрямая тупость?
Не физдии и не физдим будешь
ElicДелов-то - играть по правилам
Эхма, как тебя жизня закондыбасила
ElicД а не плакаться в монастыре со своим уставом.
Устав я от твоих устав
...
Рейтинг: 0 / 0
List?
    #39817357
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex-lsпотому и злой, что много знает, был бы глупый - был бы добрый
многознатство и ум - малопересекающиеся сущности
...
Рейтинг: 0 / 0
List?
    #39817402
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю прекратить выяснения отношений, о чём также попросил модераторов, всем удачи
...
Рейтинг: 0 / 0
List?
    #39817447
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxо чём также попросил модераторовИх вина лишь в том, что не отстрелили долб@$ба на взлёте.
...
Рейтинг: 0 / 0
List?
    #39822013
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и хоть бы кто про xmlagg сказал...
...
Рейтинг: 0 / 0
List?
    #39822068
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinи хоть бы кто про xmlagg сказал...

на первой странице 21886815

....
stax
...
Рейтинг: 0 / 0
List?
    #39822406
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
на первой странице 21886815

stax

Я не специалист по Ораклу, мне потребовалось время, чтобы докопаться.
А то "string too long"...

Хотя синтаксис ещё круче
Код: plsql
1.
2.
3.
select region_id, count(*) nn,         xmlagg(xmlelement(e,STORE_ID,',')
               order by STORE_ID).extract('//text()') ests
               from STORE group by region_id



но хоть работает
...
Рейтинг: 0 / 0
List?
    #39822528
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Cookinно хоть работает

Код: plsql
1.
xmlagg(xmlelement(e,STORE_ID,',') order by STORE_ID).extract('//text()') ests



вернет XMLTYPE а не строку да еще с лишней зпт справа. Используй XMLCAST а не EXTRACT и поменяй местами STORE_ID и зпт - лeгче отсечь лишнюю зпт:

Код: plsql
1.
substr(xmlcast(xmlagg(xmlelement(e,',',STORE_ID) order by STORE_ID) as clob),2) ests



SY.
...
Рейтинг: 0 / 0
List?
    #39822545
Фотография Victor Cookin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY, спасибо.

Но!

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


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