powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
4 сообщений из 54, страница 3 из 3
Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
    #40007166
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

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

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

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

Копать в сторону порядка выполнения элементов конструкции select и этапа на котором сформирован собственно select list. Оттуда вытекает сложность реализации подобной конструкции.
Возможно и есть некоторые сложности, но фундаментальных причин почему этого сделать нельзя я не вижу.
В других движках (например PG) отлично работает.
Код: sql
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.
postgres=# with t(x) as
postgres-# (
postgres(# select 'A1' from dual
postgres(# union all select 'A2' from dual
postgres(# union all select 'WWW' from dual
postgres(# )
postgres-# select count(*) c, length(x) l
postgres-# from t
postgres-# group by l;
 c | l
---+---
 1 | 3
 2 | 2
(2 rows)


postgres=# with t(x) as
postgres-# (
postgres(# select 'A1' from dual
postgres(# union all select 'A2' from dual
postgres(# union all select 'WWW' from dual
postgres(# )
postgres-# select count(*) c, length(x) l
postgres-# from t
postgres-# group by 2;
 c | l
---+---
 1 | 3
 2 | 2
(2 rows)



Если оставить в стороне группировку по алиасу/позиции в Оракле есть и другие странности.
Следующие запросы работают в PG вполне ожидаемо.
Код: sql
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.
postgres=# with t as (select 1 x from dual)
postgres-# select x, count(*)
postgres-# from t;
ERROR:  column "t.x" must appear in the GROUP BY clause or be used in an aggregate function
LINE 2: select x, count(*)
               ^
postgres=#
postgres=# with t as (select 1 x from dual union all select 0 from dual)
postgres-# select x, count(*)
postgres-# from t;
ERROR:  column "t.x" must appear in the GROUP BY clause or be used in an aggregate function
LINE 2: select x, count(*)
               ^
postgres=#
postgres=# with t as (select 1 x from dual)
postgres-# select x, (select count(*) from dual) y, count(*)
postgres-# from t
postgres-# group by x;
 x | y | count
---+---+-------
 1 | 1 |     1
(1 row)


postgres=#
postgres=# with t as (select 1 x from dual)
postgres-# select (select count(*) from dual) y, count(*)
postgres-# from t;
 y | count
---+-------
 1 |     1
(1 row)


postgres=#
postgres=# with t as (select 1 x from dual)
postgres-# select (select count(*) from dual) y, count(*)
postgres-# from t
postgres-# group by 'hello';
ERROR:  non-integer constant in GROUP BY
LINE 4: group by 'hello';

А что же будет в Оракл?
Код: 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.
SQL> with t as (select 1 x from dual)
  2  select x, count(*)
  3  from t;

         X   COUNT(*)
---------- ----------
         1          1

SQL>
SQL> with t as (select 1 x from dual union all select 0 from dual)
  2  select x, count(*)
  3  from t;
select x, count(*)
       *
ERROR at line 2:
ORA-00937: not a single-group group function


SQL>
SQL> with t as (select 1 x from dual)
  2  select x, (select count(*) from dual) y, count(*)
  3  from t
  4  group by x;

         X          Y   COUNT(*)
---------- ---------- ----------
         1          1          1

SQL>
SQL> with t as (select 1 x from dual)
  2  select (select count(*) from dual) y, count(*)
  3  from t;
select (select count(*) from dual) y, count(*)
               *
ERROR at line 2:
ORA-00937: not a single-group group function


SQL>
SQL> with t as (select 1 x from dual)
  2  select (select count(*) from dual) y, count(*)
  3  from t
  4  group by 'hello';

         Y   COUNT(*)
---------- ----------
         1          1

...
Рейтинг: 0 / 0
4 сообщений из 54, страница 3 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Не смог нагуглить, что такое ORDER BY '0' или ORDER BY '1'
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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