powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Агрегация, аналитика и сортировка
7 сообщений из 7, страница 1 из 1
Агрегация, аналитика и сортировка
    #39401866
Помогите, пожалуйста

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table t as
select 'Маша' val from dual union all
select '<Тест>' from dual union all
select 'Федя' from dual union all
select 'Маша' from dual union all
select 'John Doe' from dual

select val, count(*) cnt from t group by val order by 1

VAL             CNT
-------- ----------
John Doe          1
Маша              2
<Тест>            1
Федя              1


Пытаемся проагрегировать, пронумеровать и вывести с сортировкой по этому номеру.

Попытка номер 1.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select row_number() over(order by val) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1

        RN VAL             CNT
---------- -------- ----------
         3 <Тест>            1
         1 John Doe          1
         2 Маша              2
         4 Федя              1

Пронумеровано правильно, отсортировано неправильно

Попытка номер 2.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select row_number() over(order by val) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1 desc

        RN VAL             CNT
---------- -------- ----------
         4 Федя              1
         3 <Тест>            1
         2 Маша              2
         1 John Doe          1

Пронумеровано правильно, отсортировано правильно, но хотелось бы в другом порядке :)

Попытка номер 3.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select row_number() over(order by val desc) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1

        RN VAL             CNT
---------- -------- ----------
         1 John Doe          1
         2 John Doe          1
         3 John Doe          2
         4 John Doe          1

Эмм... wtf?!

Попытка номер 4.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select row_number() over(order by val desc) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1 desc

        RN VAL             CNT
---------- -------- ----------
         4 John Doe          1
         3 John Doe          2
         2 John Doe          1
         1 John Doe          1

Аналогично попытке 3

Поиском нашел похожую тему
http://www.sql.ru/forum/1209682
но там group by одновременно вместе с row_number, да и ответа нет :(

Что я делаю не так?
Как в таких случаях поступать?
Как правильно писать запрос, чтобы нивелировать шанс возникновения подобной ситуации?
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39401876
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудачник321
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Попытка номер 1.
select row_number() over(order by val) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1

        RN VAL             CNT
---------- -------- ----------
         3 <Тест>            1
         1 John Doe          1
         2 Маша              2
         4 Федя              1

Пронумеровано правильно, отсортировано неправильно

по-моему, отсортивано как раз правильно

не смог повторить
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
RN	VAL	CNT
1	<Тест>	 1
2	John Doe 1
3	Маша	 2
4	Федя	 1


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



а какие NLSы?
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39401881
CoolerMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неудачник321Попытка номер 1.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select row_number() over(order by val) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1

        RN VAL             CNT
---------- -------- ----------
         3 <Тест>            1
         1 John Doe          1
         2 Маша              2
         4 Федя              1

Пронумеровано правильно, отсортировано подкорректировано неправильно

Чистый вброс
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39401890
andreymxНеудачник321
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Попытка номер 1.
select row_number() over(order by val) rn, val, cnt from (select val, count(*) cnt from t group by val) order by 1

        RN VAL             CNT
---------- -------- ----------
         3 <Тест>            1
         1 John Doe          1
         2 Маша              2
         4 Федя              1

Пронумеровано правильно, отсортировано неправильно

по-моему, отсортивано как раз правильноRN=3 стоит до 2 и 4, а не между ними. Разве это правильно?

andreymxа какие NLSы?NLS_LANGUAGE RUSSIAN
NLS_SORT RUSSIAN

Изменил NLS_SORT на BINARY, непонятки пропали. Только теперь сортирует не в той последовательности (что логично), в какой хотелось.

Два разных order by в одном запросе использовали разные NLS_SORT?
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39401892
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудачник321,

nls_sort/nls_comp в binary и flush shared pool.
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39401896
-2-Неудачник321,
nls_sort/nls_comp в binary и flush shared pool.NLS_SORT='RUSSIAN' никак не оставить? :(

Попробовал еще комбинацию
NLS_SORT = 'RUSSIAN'
NLS_COMP = 'LINGUISTIC'

Первый запрос без изменений, но 3 и 4 перестали глючить
...
Рейтинг: 0 / 0
Агрегация, аналитика и сортировка
    #39402432
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неудачник321-2-Неудачник321,
nls_sort/nls_comp в binary и flush shared pool.NLS_SORT='RUSSIAN' никак не оставить? :(

Попробовал еще комбинацию
NLS_SORT = 'RUSSIAN'
NLS_COMP = 'LINGUISTIC'

Первый запрос без изменений, но 3 и 4 перестали глючить

когда-то проскакивало что в некоторых версиях(старых) в over сортировка по умолчанию бинари
попробуйте в овер поставить принудительно NLSSORT(val , 'NLS_SORT = UKRAINIAN')

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


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