|
|
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
Уважаемые, появилась такая проблемка: есть групповой запрос, по двум полям, допустим: select job,deptno,count(*) from emp group by job,deptno (1) , возвращающий следующие результаты: CLERC , 10 , 1 ....................... ANALYST , 20, 2 ....................... SALESMAN , 30, 4 PRESIDENT, 10, 1 ну и т.д. ВОПРОС : Почему первое поле сортируется не в алфавитном порядке, а по количеству символов в слове? Хотя группировка по одному полю (job) - даёт "правильный" результат: ANALYST , 2 CLERC , 4 PRESIDENT, 1 и т.д. Тот же запрос (1) в БД Оракл версии 8.1.х - отрабатывает правильно: первое поле сортируется в алфавитном порядке. Возможно, это связанно с какими-то инициализационными параметрами в 9ке?! Использование конструкции ORDER BY ставит всё на свои места, но ведь должно же и без неё работать? или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:08 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
> но ведь должно же и без неё работать? или я не прав? существует ряд случаев когда без явной сортировки этот прием не работает... например в случае параллельной обработки запросов или иногда при партиционированных таблицах... т.е. если вы "железно" хотите получить отсортированный результат, надо использовать "order by" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:25 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
Дело в том, что в 9ке "этот приём" ВООБЩЕ!!! не работает, по крайней у меня не получилось (пробовал на 2х разных инстансах, с совершенно различными таблицами), результат один и тот-же (описано выше)... а в 8ке никаких проблем не возникало... Для использование ORDER BY необходимо переписать большое количество скриптов, так что хотелось бы сначало попробовать перенастроить БД, если дело в ней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:49 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
V takom sluchae ispol'zyut Group_id() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:54 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
какие есть индексы в приведенном примере? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 16:57 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
Kak recomendaciya -- ne primenyat group by dlya sortirovki. nikto ne garantiroral cho group by - sortiruet - garantiruen=tsya tolko gruppirovka ----------------------- Esli bez perepisovaniya select-ov : Moget bit v dannoy situacii moget pomoch ustanovka parametra sovmestimosty s 8i v init.ora (no v etom i ne uveren - probovat nado, poskolku optimizatory silno raznie) ----------------------------------------------------- 2 Oracle X-pert >> V takom sluchae ispol'zyut Group_id() 1. Group_id() - voobche-to po bolsey chasty ispolzuyut v select-ah s analiticheskimy funkciyami (a-lya rollup / cube) dlya regulirovaniya urovney itokovis summ no ne dlya sortirovky rezultata. 2. osnovnaya problema sostoit v popytke ispravit rabotu prilogeniya bez izmeneniya koda. a chto order by ... chto Group_id() ... eto est izmenenie koda. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2003, 19:14 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
MaxU , а причём здесь индексы? ведь при группировке всё-равно таблица будет полностья сканироваться? или я опять не прав? ShgGena , можно поподробнее, как именно параметр называется? Дело, видимо, действительно в оптимизаторе, но уж очень он странно работает в 9ке: если группировка по одному полю, то сортирует по алфавиту, если по нескольким сначала по кол-ву символов, а уж потом по алфавиту... вот в этом прежде всего хотелось бы разобраться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2003, 09:31 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
group by не гарантирует сортировки!!! у меня были случаи на 8.1 когда после group by результат небыл отсортирован. Если хочешь гарантированно отсортированную выборку используй order by ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2003, 10:22 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
>MaxU, а причём здесь индексы? ведь при группировке всё-равно таблица >будет полностья сканироваться? или я опять не прав? Это ничего, если я за Макса отвечу :-)? Так вот этот вопрос уже обсуждался - если существует индекс по полю, по которому производится группировка, то при определенных условиях (поле NOT NULL) будет выполняться INDEX FULL SCAN (а не TABLE FULL SCAN) без последующей сортировки, т.к. индекс уже отсортирован по определению. Единственная проблема в том, что индекс всегда отсортирован в binary order, а не согласно nls параметрам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2003, 13:27 |
|
||
|
Group By in ver9.2.0.1
|
|||
|---|---|---|---|
|
#18+
Гена, за тобой не успеешь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.03.2003, 13:35 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32114042&tid=1991595]: |
0ms |
get settings: |
10ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
145ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 431ms |

| 0 / 0 |
