powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
21 сообщений из 71, страница 3 из 3
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
21 сообщений из 71, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / List?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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