powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
25 сообщений из 54, страница 2 из 3
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006320
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Stax,

Не один же раз разбирали уже почему так.


про group by?

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

......
stax
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006325
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

даж жаль что для group by пока что не сделали по position / alias

.....
stax


stax, я думаю это запрещено по той же причине, что и group by "alias".

Почему запрещен груп по алиасу, я достоверно не знаю, думаю потому, что слишком легко зацепить агрегатную функцию.

select count(*) as c from all_tables
group by c
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006335
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно веселые конструкции придумать )))

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select *
from  (
  select 10, 5, 2 from dual union all
  select 101, 55, 1 from dual
  )
order by 2;

select *
from  (
  select 10, 5, 2 from dual union all
  select 101, 55, 1 from dual
  )
order by '2';

select *
from  (
  select 10, 5, 2 from dual union all
  select 101, 55, 1 from dual
  )
order by "2";
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006440
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,


Весело у вас!
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006459
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Почему запрещен груп по алиасу

Копать в сторону порядка выполнения элементов конструкции select и этапа на котором сформирован собственно select list. Оттуда вытекает сложность реализации подобной конструкции.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006463
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env

Копать в сторону

копать не собираюсь
имхо
перед group by "все" уже сформировано, осталось сгруппировать

большой разницы с order by не вижу

конечно надо чутку попотеть над реализацией


ps
в древних версиях group by вызывал сортировку
тоесть грубо ето order by + группировка

.....
stax
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006466
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

group by выполняется до формирования select list, а отдельные агрегаты могут быть посчитаны ещё на этапе извлечения данных
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006469
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Стас, ты не путаешь SORT/HASH GROUP BY случаем с сортировкой итогового курсора?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006472
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коллеги, о чём топик?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006474
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx,

Как пропатчить KDE под FreeBSD, разумеется. А изначально о недопонимании разницы между позиционной нотацией и числовым выражением в order by.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006477
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стас,

Вот здесь позиционная/алиасная нотация на какой уровень группировки должна распространяться и почему именно на него?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> with t as (
  2      select 1 id, 2 subid, 10 n from dual union all
  3      select 2 id, 2 subid, 20 n from dual union all
  4      select 3 id, 2 subid, 30 n from dual union all
  5      select 4 id, 4 subid, 40 n from dual union all
  6      select 6 id, 5 subid, 50 n from dual
  7  )
  8  select
  9      sum(count(t.id) + sum(t.n)) s
 10  from
 11      t
 12  group by
 13      t.subid;

         S
----------
       155
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006498
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env
Стас,

Вот здесь позиционная/алиасная нотация на какой уровень группировки должна распространяться и почему именно на него?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> with t as (
  2      select 1 id, 2 subid, 10 n from dual union all
  3      select 2 id, 2 subid, 20 n from dual union all
  4      select 3 id, 2 subid, 30 n from dual union all
  5      select 4 id, 4 subid, 40 n from dual union all
  6      select 6 id, 5 subid, 50 n from dual
  7  )
  8  select
  9      sum(count(t.id) + sum(t.n)) s
 10  from
 11      t
 12  group by
 13      t.subid;

         S
----------
       155


сдесь никак
нет выражения которое напрягает меня повторять в group by

но пример хороший
t.subid явно нет в селект листе

пример с алиасом
Код: 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.
48.
49.
SQL> ed
Wrote file afiedt.buf

  1  select
  2    case
  3      when sal+nvl(comm,0)<1000 then 'Мизер'
  4      when sal+nvl(comm,0) between 1000 and 2499 then 'Мало'
  5      when sal+nvl(comm,0) between 2500 and 4999 then 'Ок'
  6      else 'Шефы'
  7      end g
  8    ,count (*)
  9   end from emp
 10*  group by g
SQL> /
 group by g
          *
ERROR at line 10:
ORA-00904: "G": invalid identifier


SQL> ed
Wrote file afiedt.buf

  1  select
  2    case
  3      when sal+nvl(comm,0)<1000 then 'Мизер'
  4      when sal+nvl(comm,0) between 1000 and 2499 then 'Мало'
  5      when sal+nvl(comm,0) between 2500 and 4999 then 'Ок'
  6      else 'Шефы'
  7      end g
  8    ,count (*)
  9   end from emp
 10   group by --g
 11    case
 12      when sal+nvl(comm,0)<1000 then 'Мизер'
 13      when sal+nvl(comm,0) between 1000 and 2499 then 'Мало'
 14      when sal+nvl(comm,0) between 2500 and 4999 then 'Ок'
 15      else 'Шефы'
 16*     end
SQL> /

G            END
----- ----------
Мизер          2
Шефы           1
Мало           6
Ок             5

SQL>



оно мне и не надо, но иногда доставало

.....
stax
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006504
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
коллеги, о чём топик?


о мечтах (пожеланиях) к оракле ком

+ поднять процент занятости на работе

.....
stax
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006625
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax

имхо
перед group by "все" уже сформировано, осталось сгруппировать

большой разницы с order by не вижу


> "все" уже сформировано -
кроме значения агрегатных функций (там они будут, иначе хватает distinct вместо group)
Если позволить ссылку по алиасу, можно легко создать круговую зависимость, и труднее написать текст ошибки.
"group by ссылается на алиас, содержащий агрегатные функции, не делайте этого"

select count(val) as cnt from tst group by cnt

Я на это ссылался, когда говорил "чтоб не зацепить агрегатную функцию".

Вот я только не уверен, ссылка в group by на любую агрегатную функцию создает круговую зависимость, или бывают случаи когда это можно?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006628
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
ссылка в group by на любую агрегатную функцию

Что этим хотели сказать-то?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006632
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Использование агрегатных функций в конструкции group by запрещено в явном виде и выдаст ошибку
--ORA-00934: групповая функция здесь не разрешена
поэтому о круговых зависимостях речи не идёт.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006720
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL

Вот я только не уверен, ссылка в group by на любую агрегатную функцию создает круговую зависимость, или бывают случаи когда это можно?


Похоже, что исключений нет; в 11.2 ошибка происходит на стадии лексического разбора:

select count(2*2) from dual where count(2*2) < 0 -- нельзя, хоть и тавтология

select count(2*2) from dual having count(2*2) < 0 -- можно
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006734
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Похоже, что исключений нет; в 11.2 ошибка происходит на стадии лексического разбора:

select count(2*2) from dual where count(2*2) < 0 -- нельзя, хоть и тавтология

select count(2*2) from dual having count(2*2) < 0 -- можно

Что ты хотел продемонстрировать этим примером? И что ты ожидал, что ошибки не будет?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006746
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode
НеофитSQL
Похоже, что исключений нет; в 11.2 ошибка происходит на стадии лексического разбора:

select count(2*2) from dual where count(2*2) < 0 -- нельзя, хоть и тавтология

select count(2*2) from dual having count(2*2) < 0 -- можно

Что ты хотел продемонстрировать этим примером? И что ты ожидал, что ошибки не будет?


Я хотел посмотреть, как мой Оракл 11.2 обрабатывает подобные выражения:
1) лексически (отказывается принимать агрегатные функции в неположеном месте)
или
2) логически (обнаруживает круговую логику в процессе построения плана)

Из пары примеров что я попробовал, это скорее первое чем второе.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006759
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL,

Где ты увидел круговую логику в приведенном тобой примере?
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006765
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
graycode
НеофитSQL,

Где ты увидел круговую логику в приведенном тобой примере?


В приведенном мной примере намеренно отсутствует круговая логика,
поэтому я его и выбрал для проверки своей гипотезы.

Если бы я использовал пример с круговой логикой, например

select count(val) from table group by count(val),

то это бы не ответило на мой вопрос.

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

1. Вопрос был: есть ли исключения, когда использование агрегатных функций разрешено в GROUP BY?

2. Для поиска исключений я ограничился выражениями которые не содержат круговую логику (т.е вычисляемы).

3. Из десятка разных очевидно вычисляемых выражений, все были отвергнуты Ораклом 11.2

4. Я сделал вывод что оракл запрещает такие выражения на основании лексики, а не проблем с обработкой.

5. Рассказал про свое умозаключение

6. получил вопрос от вас, где круговая логика в моем примере.

7. сейчас обращаю ваше внимание на п.2 как ответ, и пп 1-4 для контекста.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006767
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL
Если вы читали по диагонали

Если бы ты читал документацию и книги не по диагонали, мы бы не созерцали этот поток бреда.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40006829
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

Настоятельно рекомендую найти и почитать в каком порядке выполняются элементы конструкции select. Высвободит много вашего времени на решение реальных задач.
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40007113
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL,

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


> в каком порядке выполняются элементы конструкции select

Тут или неудачный выбор слов, или коренное непонимание декларативной природы SQL.
Если второе, то вам поможет книжка по теории множеств. Начните здесь: https://habr.com/ru/post/457312/
...
Рейтинг: 0 / 0
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40007118
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Тут или неудачный выбор слов, или коренное непонимание декларативной природы SQL.
Больше похоже на то, что у вас - функциональная неграмотность: можете читать, но не в состоянии понять.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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