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

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

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


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

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

     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
22 май 19, 08:40    [21890247]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
Stax,

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

Вот запрос:
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 процентах случаев мне достаточно запросов, который я сформулировал в начале топика.
И для данного запроса предпочёл бы, чтобы синтаксис был бы

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


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

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


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

результат

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,...
22 май 19, 17:41    [21891068]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1840
Victor Cookin
Stax,

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

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

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
Я понимаю формальную некорректность такого синтаксиса, но ведь он легко и однозначно трансформируется в

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
22 май 19, 17:57    [21891088]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17347
Victor Cookin
Я понимаю формальную некорректность такого синтаксиса

Раз понимаете - воспользуйтесь корректным:
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
22 май 19, 18:00    [21891090]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28975
Victor Cookin
Я понимаю формальную некорректность такого синтаксиса, но ведь он легко и однозначно трансформируется в
Подай патент, рационализатор, самому ораклу и заработай кучу бабла.
Но однозначно видна только твоя узколобость.
22 май 19, 18:02    [21891094]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
andrey_anonymous
Раз понимаете - воспользуйтесь корректным


А сортировка по loc_u_code - по умолчанию, как в Sybase?
22 май 19, 18:11    [21891102]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17347
Victor Cookin
andrey_anonymous
Раз понимаете - воспользуйтесь корректным

А сортировка по loc_u_code

как закажете, так и будет:
within group (order by loc_u_level desc, loc_u_code)
22 май 19, 18:14    [21891103]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1840
Victor Cookin
andrey_anonymous
Раз понимаете - воспользуйтесь корректным


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


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

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

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

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

Откуда: Самара
Сообщений: 584
Elic
Но однозначно видна только твоя узколобость.

Чего злой такой?
22 май 19, 19:12    [21891150]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 51527
Victor Cookin
Elic
Но однозначно видна только твоя узколобость.

Чего злой такой?
не обращай внимания
Он такой и есть, много знает, но злой
22 май 19, 19:17    [21891161]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28975
Victor Cookin
Чего злой такой?
Сперва встречный вопрос: откуда такая упрямая тупость? Делов-то - играть по правилам, а не плакаться в монастыре со своим уставом.
23 май 19, 07:59    [21891429]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
alex-ls
Member

Откуда: Иркутская обл - Пенза - Москва
Сообщений: 6593
andreymx
Он такой и есть, много знает, но злой

потому и злой, что много знает, был бы глупый - был бы добрый
23 май 19, 10:47    [21891609]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
Elic
Сперва встречный вопрос

Ты еврей? Тогда поверю, что много знаешь.
Elic
откуда такая упрямая тупость?

Не физдии и не физдим будешь
Elic
Делов-то - играть по правилам

Эхма, как тебя жизня закондыбасила
Elic
Д а не плакаться в монастыре со своим уставом.

Устав я от твоих устав
23 май 19, 20:43    [21892493]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
alex-ls
потому и злой, что много знает, был бы глупый - был бы добрый

многознатство и ум - малопересекающиеся сущности
23 май 19, 20:44    [21892494]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 51527
Предлагаю прекратить выяснения отношений, о чём также попросил модераторов, всем удачи
23 май 19, 23:18    [21892559]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28975
andreymx
о чём также попросил модераторов
Их вина лишь в том, что не отстрелили долб@$ба на взлёте.
24 май 19, 07:49    [21892639]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
и хоть бы кто про xmlagg сказал...
4 июн 19, 00:59    [21901044]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1840
Victor Cookin
и хоть бы кто про xmlagg сказал...


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

....
stax
4 июн 19, 08:35    [21901142]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
Stax

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

stax


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

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


но хоть работает
4 июн 19, 17:10    [21901725]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9468
Victor Cookin
но хоть работает


xmlagg(xmlelement(e,STORE_ID,',') order by STORE_ID).extract('//text()') ests


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

substr(xmlcast(xmlagg(xmlelement(e,',',STORE_ID) order by STORE_ID) as clob),2) ests


SY.
4 июн 19, 20:49    [21901923]     Ответить | Цитировать Сообщить модератору
 Re: List?  [new]
Victor Cookin
Member

Откуда: Самара
Сообщений: 584
SY, спасибо.

Но!

В моём случае TOAD покажет строку и прекрасно её экспортирует, в вашем - покажет (HUGECLOB) и не экспортирует /по умолчанию не экспортирует, надо в настройки лезть/. По времени выполнения - одинаково.
4 июн 19, 21:35    [21901956]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3]      все
Все форумы / Oracle Ответить