powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Именованное окно для аналитических функция
55 сообщений из 55, показаны все 3 страниц
Именованное окно для аналитических функция
    #39410141
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Увидел в PostgreSQL такую удобную штуку:
Код: sql
1.
2.
3.
4.
select row_number() over W as RN
from ...
window W as (partition by CLIENT_ID order by MOMENT)
...


А есть ли такое в Oracle?
У меня есть несколько многоэтажных запросов, они бы существенно сократились.
Да и выглядит на мой взгляд удобнее.
На диаграммах я такой возможности не вижу, но может быть не там ищу.
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39410151
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
WITH T AS (
           SELECT  ...,
                   многоэтажное-вычисление AS MOMENT
           ...
          )
select row_number() (partition by CLIENT_ID order by MOMENT) as RN
from ...
...



SY.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39410157
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

думаю что, нет

да и не так часто мне ето нужно
или я не понял фичу

мне было-бы удобно
1) group by 1,3
2) із май скуеля select x a,a*x a2, a2*x a3 ...

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39410722
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY , я про другую "многоэтажность".
Код: sql
1.
2.
3.
4.
5.
6.
7.
select row_number() over W as RN
, count(*) over W as CNT
, sum(SCORE) over W as SUM
, lead(MOMENT) over W as NEXT
from ...
window W as (partition by CLIENT_ID order by MOMENT)
...
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39410830
Alibek B. SY , я про другую "многоэтажность".
Код: sql
1.
2.
3.
4.
5.
6.
7.
select row_number() over W as RN
, count(*) over W as CNT
, sum(SCORE) over W as SUM
, lead(MOMENT) over W as NEXT
from ...
window W as (partition by CLIENT_ID order by MOMENT)
...


Открой для себя макроподстановки (&)
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39411415
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..мне было-бы удобно
1) group by 1,3Этого не будет, потому что не может быть никогда.
order by выполняется в последнюю очередь, когда уже все посчитано.
После group by выполняется аналитика и прочее.
Абсолютно некорректно было бы использовать номера столбцов в group by, если сами значения будут посчитаны после применения оного.
Пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> select count(*) over() cnt1
  2    from table(sys.odcinumberlist(1, 1));

      CNT1
----------
         2
         2

SQL> select count(*) over() cnt1, count(*) cnt2
  2    from table(sys.odcinumberlist(1, 1));

      CNT1       CNT2
---------- ----------
         1          2

SQL> select count(*) over() cnt1, count(*) cnt2
  2    from table(sys.odcinumberlist(1, 1))
  3   group by 1;

      CNT1       CNT2
---------- ----------
         1          2

То есть, в третьем случае, если трактовать 1 не как выражение, а как номер столбца,
то ты ожидаешь, что изменился бы порядок выполнения запроса, и аналитика выполнилась перед группировкой, что привело бы к результату
Код: plaintext
2 2
?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420088
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..мне было-бы удобно
1) group by 1,3Этого не будет, потому что не может быть никогда.
order by выполняется в последнюю очередь, когда уже все посчитано.
После group by выполняется аналитика и прочее.
Абсолютно некорректно было бы использовать номера столбцов в group by, если сами значения будут посчитаны после применения оного.
Пример
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> select count(*) over() cnt1
  2    from table(sys.odcinumberlist(1, 1));

      CNT1
----------
         2
         2

SQL> select count(*) over() cnt1, count(*) cnt2
  2    from table(sys.odcinumberlist(1, 1));

      CNT1       CNT2
---------- ----------
         1          2

SQL> select count(*) over() cnt1, count(*) cnt2
  2    from table(sys.odcinumberlist(1, 1))
  3   group by 1;

      CNT1       CNT2
---------- ----------
         1          2

То есть, в третьем случае, если трактовать 1 не как выражение, а как номер столбца,
то ты ожидаешь, что изменился бы порядок выполнения запроса, и аналитика выполнилась перед группировкой, что привело бы к результату
Код: plaintext
2 2

?

то что не будет то я верю, а вот что невозможно нет

в Вашем последним случае должен дать ошибку
ORA-30483: window functions are not allowed here


Код: plsql
1.
2.
3.
4.
5.
6.
7.
  1  select row_number() over (partition by deptno order by ename) rn,sum(sal) ss from emp
  2* group by row_number() over (partition by deptno order by ename)
SQL> /
group by row_number() over (partition by deptno order by ename)
         *
ERROR at line 2:
ORA-30483: window  functions are not allowed here



аналитику нельзя в group by при любой "нотации"
какой результат, ет другой вопрос

......
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420148
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Аналитика - это лишь пример. Там может быть скаляр или прочее.
Суть в том, что сортировка последняя, до нее все вычислено и можно использовать номера столбцов.
Гриппировка - далеко не последняя операция и выполнении запроса отсюда хотелка нерациональна.

Это не рассматривая более сложные комбинации.

Например.
Пытаемся натянуть модель с неуникальной адресацией в измирении - закономерно получаем ошибку
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  --group by mod(id, 2), x
  5  model
  6  --unique single reference
  7  dimension by (mod(id,2) id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /
from t
     *
ERROR at line 3:
ORA-32638: Non unique addressing in MODEL dimensions

Добавляем уникальность в используемых правилах, а не по всему измерению - ОК
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  --group by mod(id, 2), x
  5  model
  6  unique single reference
  7  dimension by (mod(id,2) id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /

        MI          X
---------- ----------
         1          0
         1          0
         0         -1

Предварительно группируем и убираем "unique single reference" - тоже работает ОК (результат закономерно "схлопнутый")
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  group by mod(id, 2)--, x
  5  model
  6  --unique single reference
  7  dimension by (mod(id,2) id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /

        MI          X
---------- ----------
         1          0
         0         -1

Теперь пытаемся группировать по обоим атрибутам выборки
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  group by mod(id, 2), x
  5  model
  6  --unique single reference
  7  dimension by (mod(id,2) id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /
group by mod(id, 2), x
                     *
ERROR at line 4:
ORA-00904: "X": invalid identifier

Про X на этапе группировки вообще ничего не изветсно!
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420156
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,
причем сдесь модель,
нельзя при любой нотации указывать "столбец" из measures,
ошибку выдало не из-за указания порядкового номера/алиаса (1,2 ...)

как бы выглядел пример, если БЫ ...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  group by mi --, x
  5  model
  6  --unique single reference
  7  dimension by (mi id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /



......
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420162
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..dbms_photoshop,
причем сдесь модель,
нельзя при любой нотации указывать "столбец" из measures,
ошибку выдало не из-за указания порядкового номера/алиаса (1,2 ...)

как бы выглядел пример, если БЫ ...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  group by mi --, x
  5  model
  6  --unique single reference
  7  dimension by (mi id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /



......
staxЯ на конкретных примерах пытаюсь донести мысль, что вот это
stax..мне было-бы удобно
1) group by 1,3
абсурд.

В том и дело, что многие колонки вычисляются после группировки, поэтому хотеть использовать нумерацию в группировке несколько странно.

Ты общаешься в духе
YouTube Video
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420168
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понимаю, речь совсем о другом.
Дело не в том, что group by вычисляется не в самим конце — никто на значения столбцов и не ссылается.
Удобно вместо повтора выражения в двух местах (в select и в group by) указывать выражение только в одном месте (в select), а в group by указывать просто номер столбца из select, из которого нужно использовать выражение. Особенно это удобно для многоэтажных выражений, которые в этом случае можно было бы указывать только один раз:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select type_id
, case
...
  end as grp1
, case
...
  end as grp2
, count(*) as cnt
from ...
group by type_id, 2, 3


Не то, чтобы без этого нельзя было бы прожить, но это удобство, которое несложно было бы реализовать (парсер при выявлении номера столбца просто бы подставлял вместо номера выражение из select).
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420173
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Ты ничего не понял как и Станислав. Ок, ждите.
stax..мне было-бы удобно
1) group by 1,3
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420174
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..dbms_photoshop,
причем сдесь модель,
нельзя при любой нотации указывать "столбец" из measures,
ошибку выдало не из-за указания порядкового номера/алиаса (1,2 ...)

как бы выглядел пример, если БЫ ...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SQL> with t as (select column_value id from table(sys.odcinumberlist(1, 2, 3)))
  2  select mod(id, 2) mi, x
  3  from t
  4  group by mi --, x
  5  model
  6  --unique single reference
  7  dimension by (mi id)
  8  measures (0 x)
  9  (x[0]=-1)
 10  /



......
staxЯ на конкретных примерах пытаюсь донести мысль, что вот это
stax..мне было-бы удобно
1) group by 1,3
абсурд.

В том и дело, что многие колонки вычисляются после группировки, поэтому хотеть использовать нумерацию в группировке несколько странно.

не надо бездумно колонки впихивать в group by, из модель/аналитики оракля их по любому не пропускает, хотя аналитику мог и пропустить

что ораклю не понятно в примере
Код: plsql
1.
2.
3.
4.
5.
6.
7.
  1  select row_number() over (partition by deptno order by ename) rn,sum(sal) ss from emp
  2* group by row_number() over (partition by deptno order by ename)
SQL> /
group by row_number() over (partition by deptno order by ename)
         *
ERROR at line 2:
ORA-30483: window  functions are not allowed here



Вы меня не переубедили

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420180
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.никто на значения столбцов и не ссылается
И что тогда должно означать?
Код: plsql
1.
select rownum, count(*) over() from таблица group by rollup(1, 2)
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420184
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..Вы меня не переубедили Да я уже и не пытаюсь.
Тебя же совершенно не смущает, что, если в запросе 10 колонок, то может случиться так, что в группировке ты сможешь указывать только, скажем
2,5,7
потому что остальные считаются после группировки.
А в скортировке ты можешь указывать всегда любую комбинацию.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420187
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Насколько я понимаю, речь совсем о другом.
Дело не в том, что group by вычисляется не в самим конце — никто на значения столбцов и не ссылается.
Удобно вместо повтора выражения в двух местах (в select и в group by) указывать выражение только в одном месте (в select), а в group by указывать просто номер столбца из select, из которого нужно использовать выражение. Особенно это удобно для многоэтажных выражений, которые в этом случае можно было бы указывать только один раз:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select type_id
, case
...
  end as grp1
, case
...
  end as grp2
, count(*) as cnt
from ...
group by type_id, 2, 3


Не то, чтобы без этого нельзя было бы прожить, но это удобство, которое несложно было бы реализовать (парсер при выявлении номера столбца просто бы подставлял вместо номера выражение из select).

не обязательно номер, удобно и алиас
я номер привел, чтоб более понятно было о чем я

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420189
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лично меня, тут больше вероятность ошибки пугает. Удалили/добавили поле в select list и все. Нумерация уехала, фиг ошибку найдешь и обратно реконструируешь, какая же идея была в запрос исходным автором вложена.

С учетом, что в системах под Oracle бывают НУ ОЧЕНЬ большие и многовложенные запросы - контроль синтаксиса и ошибок станет просто смертельный.

Copy / past выражений тоже раздражает. Но указание колонок по номеру, приведет к полному падению supportability кода.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420193
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-Alibek B.никто на значения столбцов и не ссылается
И что тогда должно означать?
Код: plsql
1.
select rownum, count(*) over() from таблица group by rollup(1, 2)



должен дать ошибку
ERROR at line 1:
ORA-00934: group function is not allowed here

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420210
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..Вы меня не переубедили Да я уже и не пытаюсь.
Тебя же совершенно не смущает, что, если в запросе 10 колонок, то может случиться так, что в группировке ты сможешь указывать только, скажем
2,5,7
потому что остальные считаются после группировки.
А в скортировке ты можешь указывать всегда любую комбинацию.
почему меня должно смущать, я ж не бездумно указываю 2,5,7

меня ж не смущает что в ордер бай іногда проходіт только "позиционная/алиасная нотация"

ps
мне более інтересно в чем я неправ с коннект бай
....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420219
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЛично меня, тут больше вероятность ошибки пугает. Удалили/добавили поле в select list и все. Нумерация уехала, фиг ошибку найдешь и обратно реконструируешь, какая же идея была в запрос исходным автором вложена.

С учетом, что в системах под Oracle бывают НУ ОЧЕНЬ большие и многовложенные запросы - контроль синтаксиса и ошибок станет просто смертельный.

Copy / past выражений тоже раздражает. Но указание колонок по номеру, приведет к полному падению supportability кода.

IMHO & AFAIKну ладно, хрен с вами, лично мне тоже групп бай по номерам результирующих колонок нафиг не впал
давайте групп бай по алиасам тех колонок, уже можно?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420221
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevЛично меня, тут больше вероятность ошибки пугает. Удалили/добавили поле в select list и все. Нумерация уехала, фиг ошибку найдешь и обратно реконструируешь, какая же идея была в запрос исходным автором вложена.

С учетом, что в системах под Oracle бывают НУ ОЧЕНЬ большие и многовложенные запросы - контроль синтаксиса и ошибок станет просто смертельный.

Copy / past выражений тоже раздражает. Но указание колонок по номеру, приведет к полному падению supportability кода.

IMHO & AFAIK
а в ордер бай не смущает?
причем древних версиях иногда только позиционная
я понимаю что последствия несколько меньшие

я ж уточнял, в идеале не 1,4, а алиасы, если удалили ошибка


юююю
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420223
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxдавайте групп бай по алиасам тех колонок, уже можно?

авторЭтого не будет, потому что не может быть никогда.



+1

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420224
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..а в ордер бай не смущает?
причем древних версиях иногда только позиционная
я понимаю что последствия несколько меньшие
staxбыло несколько раз, когда в результате неверной сортировки показывалась совершенно иная картина
когда приложение строит, например, какой-то аналог дерева
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420226
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxstax..а в ордер бай не смущает?
причем древних версиях иногда только позиционная
я понимаю что последствия несколько меньшие
staxбыло несколько раз, когда в результате неверной сортировки показывалась совершенно иная картина
когда приложение строит, например, какой-то аналог дерева
да я верю
топ N на основе ордер бай тоже важными бывают

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420231
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..andreymxдавайте групп бай по алиасам тех колонок, уже можно?

авторЭтого не будет, потому что не может быть никогда.



+1

.....
staxТы мои ответы не приписывай к иным формулировкам, ок?

Про connect by речь шла вообще в другой теме и я довольно внятно указал, что искать в доке.
Если интересуют детали - я описывал в The Power of Oracle SQL .
Но я один раз тебе давал ссылку, так что полагаю, что у тебя нет желания читать.
А у меня нет желания копипастить одно и то же и расжевывать по 100 раз.
На этом предлагаю и разойтись.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420268
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..пропущено...


пропущено...



+1

.....
staxТы мои ответы не приписывай к иным формулировкам, ок?


Про connect by речь шла вообще в другой теме и я довольно внятно указал, что искать в доке.

Если интересуют детали - я описывал в The Power of Oracle SQL .
Но я один раз тебе давал ссылку, так что полагаю, что у тебя нет желания читать.
А у меня нет желания копипастить одно и то же и расжевывать по 100 раз.
На этом предлагаю и разойтись.
с чего Вы взяли что ето Ваш ответ, ето Ваша формулировка(фраза), но не Ваш ответ

нет желания разжевывать, я ж не настаиваю,
да и вряд ли мне пригодится в реальной жизни,
редко коннект бай успользую, тем более с ровнум
вопрос для меня больше познавательный чем практический

Вы ж тоже сюда дали ссылку из другой темы

книжку скачал давно (спасибо за труд), начал читать, но ж надо внимательно, счас нет времени отвлечься надолго

90% что прочитаю , но не счас, не хочу просто листать, надо вникать в примеры

......
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420271
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Со мной можно на ты, меня один а не много.

Я категорично высказывался по поводу использовании номеров в группировке
С алиасами может и можно сделать, а может я что-то упускаю.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420286
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopstax..,

Со мной можно на ты, меня один а не много.

Я категорично высказывался по поводу использовании номеров в группировке
С алиасами может и можно сделать, а может я что-то упускаю.

какая принципиальная разница?

если колонок меньше то
ORA-01785: GROUP BY item must be the number of a SELECT-list expression

мне просто неудобно, ладно там копи/пасте, так надо ж алиас удалять

......
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420301
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..какая принципиальная разница?Order by по номерам провокационный синтаксис, влекущий трудновыводимые ошибки.
А с group by поезд уже уехал. Добавление возможности группировать по алиасам или номерам может поломать существующие запросы, причем синтаксическая валидность может сохраниться, а стрельнет очень больно.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420306
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-А с group by поезд уже уехал. Добавление возможности группировать по алиасам или номерам может поломать существующие запросы, причем синтаксическая валидность может сохраниться, а стрельнет очень больно.пока придумать не могу, где и как
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420322
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-stax..какая принципиальная разница? Order by по номерам провокационный синтаксис, влекущий трудновыводимые ошибки .
А с group by поезд уже уехал. Добавление возможности группировать по алиасам или номерам может поломать существующие запросы, причем синтаксическая валидность может сохраниться, а стрельнет очень больно.
повторно
в старых версиях были варианты запросов (с юнион) где сортировка только по номерах,
и в доке было отражено
как в новых не знаю, не проверял

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420324
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

Код: 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.
25.
26.
27.
28.
SQL> ed
Wrote file afiedt.buf

  1  select 1 a,2 b from dual union all
  2  select 1+1,3+3 from dual union all
  3  select 5,5 from dual
  4* order by a,b
SQL> /
order by a,b
         *
ERROR at line 4:
ORA-00904: "A": invalid identifier


SQL> ed
Wrote file afiedt.buf

  1  select 1 a,2 b from dual union all
  2  select 1+1,3+3 from dual union all
  3  select 5,5 from dual
  4* order by 1,2
SQL> /

         A          B
---------- ----------
         1          2
         2          6
         5          5



.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420850
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

есть бажок ~парсера.
лечится
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Присоединен к:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions

SQL> select 1 a,2 b from dual
  2  union all
  3      select 1+1 a,3+3 b from dual union all
  4      select 5 a ,5 b  from dual
  5     order by a,b;

         A          B
---------- ----------
         1          2
         2          6
         5          5
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420868
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishstax..,

есть бажок ~парсера.
лечится

Лечение может привести к осложнениям
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE    11.2.0.4.0      Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production

SQL> select 1 a,2 b from dual
  2  union all
  3      select 1+1 b,3+3 a from dual union all
  4      select 5 a ,5 b  from dual
  5     order by a,b;

         A          B
---------- ----------
         1          2
         2          6
         5          5



Regards

Maxim
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420870
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote Maxim Demenko]orawishstax..,


Хотя, сорри, гоню
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420880
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishесть бажок ~парсера.
А в чем баг?
Насколько я помню диаграмму, order by относится только к текущему select, он не может знать о вышестоящих union all.
Я всегда union all вношу в подзапрос, а сортировку делаю снаружи.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39420944
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.orawishесть бажок ~парсера.
А в чем баг?
Насколько я помню диаграмму, order by относится только к текущему select, он не может знать о вышестоящих union all.
Я всегда union all вношу в подзапрос, а сортировку делаю снаружи.
баг в том, что в случае union (или union all) запрос стабилен только если алиас колонок дублируется в каждой (разве только, кроме последней ? ;) ветви union/union all

чтобы с нестабильностью этой не связываться, рекомендую сортировку после факторинга делать
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39421024
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.orawishесть бажок ~парсера.
А в чем баг?
Насколько я помню диаграмму, order by относится только к текущему select, он не может знать о вышестоящих union all.
Я всегда union all вношу в подзапрос, а сортировку делаю снаружи.
нет, order by относится ко всему селекту

......
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39421033
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Demenko,

[offtop]

А ты forums.oracle.com постишь что-то относительно регулярно или только тут и в oracle-l?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39421053
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopMaxim Demenko,

[offtop]

offtop
Я и здесь то нерегулярно, oracle.forums - наверное лет десять назад постил
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548237
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..andreymxдавайте групп бай по алиасам тех колонок, уже можно?

авторЭтого не будет, потому что не может быть никогда.



+1

.....
staxДолжен сообщить что ваша хотелка с группированием по номерам колонок уже реализована в других движках.
При этом корректно обрабатывается ситуация когда по колонке группировать недопустимо.

Переходите на Big Data.

Impala
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
> with t(part, value) as
> (
> select 1, 10
> union all select 1, 20
> union all select 2, 30
> )
> select sum(sum(value)) over (order by part) s_cumul, part, sum(value) s
>  from t
> group by 2;
Query: with t(part, value) as
(
select 1, 10
union all select 1, 20
union all select 2, 30
)
select sum(sum(value)) over (order by part) s_cumul, part, sum(value) s
 from t
group by 2
+---------+------+----+
| s_cumul | part | s  |
+---------+------+----+
| 30      | 1    | 30 |
| 60      | 2    | 30 |
+---------+------+----+
Fetched 2 row(s) in 0.03s
>
>
>
> with t(part, value) as
> (
> select 1, 10
> union all select 1, 20
> union all select 2, 30
> )
> select sum(sum(value)) over (order by part) s_cumul, part, sum(value) s
>  from t
> group by 1, 2;
Query: with t(part, value) as
(
select 1, 10
union all select 1, 20
union all select 2, 30
)
select sum(sum(value)) over (order by part) s_cumul, part, sum(value) s
 from t
group by 1, 2
ERROR: AnalysisException: GROUP BY expression must not contain aggregate functions: 1

Я по прежнему считаю это нелогичным, хотя какое это уже имеет значение.

Группировка по алиасу тоже работает. Эти запросы возвращают тот же результат, что и первый.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with t(part, value) as
(
select 1, 10
union all select 1, 20
union all select 2, 30
)
select sum(sum(value)) over (order by part) s_cumul, part as part_alias, sum(value) s
 from t
group by part;

with t(part, value) as
(
select 1, 10
union all select 1, 20
union all select 2, 30
)
select sum(sum(value)) over (order by part) s_cumul, part as part_alias, sum(value) s
 from t
group by part_alias;
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548259
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopЯ по прежнему считаю это нелогичным, хотя какое это уже имеет значение. логично или нет, что в в Оракле есть select from dual, а в MSSQL есть SELECT from ниоткуда?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548281
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxdbms_photoshopЯ по прежнему считаю это нелогичным, хотя какое это уже имеет значение. логично или нет, что в в Оракле есть select from dual, а в MSSQL есть SELECT from ниоткуда?

не в курсе о SELECT from ниоткуда

но мне более логичным
вместо select f from dual кажется select f (вообще без from)
именно ниоткуда, просто выбрать/получить/посчитать

select f from dual - выбрать все строки из дуал и посчитать для каждой строки ф

зачем так сложно

да и ходили слухи о какой-то там конкуренции за дуал
потом прыдумили какую-то фаст дуал

.....
stax
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548353
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxdbms_photoshopЯ по прежнему считаю это нелогичным, хотя какое это уже имеет значение. логично или нет, что в в Оракле есть select from dual, а в MSSQL есть SELECT from ниоткуда?Это вопрос идеологии.
Почему бы не сделать from таким же опциональным как where clause?
Ну и такой подход в большинстве СУБД.

Кто касается МССКЛ, то большая странность это селект в никуда.
Когда в процедуре не объявляешь выходных параметров, а просто пихаешь в нее запросы.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548634
dbms_photoshopПочему бы не сделать from таким же опциональным как where clause?некоторые постмодернисты еще и без select обходятся:
Код: plaintext
table таблица == select * from таблица
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548738
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxно мне более логичным
вместо select f from dual кажется select f (вообще без from)
именно ниоткуда, просто выбрать/получить/посчитать
А почему в "ниоткуда" 1 запись, а не 500 или 0?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548744
Alibek B.почему в "ниоткуда" 1 записьаналогичные измышлизмы применимы и к where. Почему при неуказанном условии все строки, а не null строк?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548766
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopКто касается МССКЛ, то большая странность это селект в никуда.Ну почему же в никуда? На клиента.
Почему же странность? Это для нас, ораклистов, по первой, непривычно. Я вот поюзал, привык, удобно.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548929
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKaddbms_photoshopКто касается МССКЛ, то большая странность это селект в никуда.Ну почему же в никуда? На клиента.
Почему же странность? Это для нас, ораклистов, по первой, непривычно. Я вот поюзал, привык, удобно.Я то начинал как МССКЛ разработчик и первый раз как раз оказался на этом форуме -ннадцать лет назад потому что возник вопрос "как узнать тип результата процедуры". Это спустя некоторое время стало очевидно что никак, потому что она может содержать примерно такой код
Код: sql
1.
2.
3.
4.
if @param = 1
  select 1 id
else
  select 'a' a, 'b' b, 'c' c;

Так вот если разрабатывать модульное ПО, то намного удобнее посмотреть на сигнатуру и понять что на вход и что на выход чем ковырять код.

PS. Кроме клиента процедуры могут вызывать другие процедуры, не так ли?
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548944
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshop,

Удобно, когда на клиента надо выплевывать шапку, данные и footer меняющегося от месяца к месяцу отчета.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548955
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Вот категорически с тобой не соглашусь.
Во-первых не надо смешивать уровень визуализации с уровнем данных.
Во-вторых код должен быть самодокументированым.
В-третьих если отчет "очень динамический", то надо реализовывать механизмы ad-hoc reports для пользователей
или другие стредства анализа данных типа кубов и пивот таблиц.

А если решулярно меняются требования и кодер регулярно вставляет костыли, значит что-то не так в вашей консерватории.
Хотя, если все довольны... :)
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548990
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я пока не такой модный, чтобы соответствовать перечисленным тобою паттернам, а разраб клиента уж очень хотел абстрагироваться от изменений данного отчета, поэтому я по-говнокодерски выставил ему одну процедуру, внутри которой в зависимости от выбранного отчетного периода case-ами разруливается вызов той или иной вложенной ХП, которая выплевывает актуальные датасеты.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39548992
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из-за 10 кейжатийаналогичные измышлизмы применимы и к where.
Аналогия неверная.
where это по определению ограничивающая кляуза, она может только сократить набор, а не расширить. Если ее нет, значит ничего ограничивать не нужно и нужно возвращать весь набор данных.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39549006
Бракованный финский угорь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadразраб клиента уж очень хотел абстрагироваться от изменений данного отчета
Знаю я этого разраба, до сих пор ходит в каске абстрагирует и улыбается.
...
Рейтинг: 0 / 0
Именованное окно для аналитических функция
    #39549057
Alibek B.where это по определению ограничивающая кляузаОпределения это принятые соглашения. Отсутствие значения обозначается nullом. Отсутствие сортировки согласуется с order by null. Отсутствие start with приняли за start with true, но connect by null. Отсутствие джоина соответствует cross join dual. Отсутствие where субд-логично принять за where null, но по_определили, что это where true.
Вот в некоторых СУБД так же по_определили, что отсутствие from это не некий ... from true, виртуальное множество из одной строки и без полей.

Кстати, в некоторых СУБД нет хранимых процедур. Ну как может быть функция без возврата значения?! хотя бы viod!
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Именованное окно для аналитических функция
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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