Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Объясните поведение аналитической функции  [new]
new_one
Member

Откуда:
Сообщений: 4443
SELECT  COUNT(1) over() , COUNT(1)
FROM( SELECT 1 id1 FROM dual
       UNION ALL
      SELECT 1 id1 FROM dual
     )


Так возвращает одну строку

так
SELECT  COUNT(1) over()  
FROM( SELECT 1 id1 FROM dual
       UNION ALL
      SELECT 1 id1 FROM dual
     )


Две!!
14 май 14, 16:41    [16016683]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
Elic
Member

Откуда:
Сообщений: 29977
new_one
, COUNT(1)
Это агрегат.
14 май 14, 16:47    [16016726]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
Сергей Арсеньев
Member

Откуда:
Сообщений: 4118
new_one
Так возвращает одну строку

А сколько надо?

select count(1) from ... - превращает Вашу выборку в одну строку, по ней и делается count(1) over.
14 май 14, 16:50    [16016742]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
new_one,

При собеседовании на джуниора обычно просят раположить кляузы в порядке, в котором они выполняются:
FROM
GROUP BY
HAVING
ORDER BY
SELECT
WHERE
После понимания как работает вопрос должен отпасть сам собой.
При собеседовании на мидла уже надо знать дополнительные ключевые слова такие как connect by, sample etc и тоже порядок их выполнения.
14 май 14, 16:59    [16016806]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
new_one
Member

Откуда:
Сообщений: 4443
Мой порядок такой

Сначала доступ к данным их
FROM
потом накладываем условия
WHERE
Потом группируем
GROUP BY
Откидываем то, что не попало под условия группировки
HAVING
сортируем
ORDER BY
и выбираем
SELECT

Правильный ответ?
15 май 14, 11:54    [16020087]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
пыщ-пыщ-пыщ
Guest
new_one,
последние два местами поменять
15 май 14, 12:01    [16020141]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
цкуекукеук
Guest
Про ORDER BY и SELECT тупой вопрос )))
15 май 14, 12:11    [16020217]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
-2-
Member

Откуда:
Сообщений: 15330
пыщ-пыщ-пыщ
new_one,
последние два местами поменять
Обсуждать порядок выполнения кляуз в отрыве от плана допустимо только для джуниора. Да и само понятие "выполняются" неоднозначно.
15 май 14, 12:29    [16020350]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
new_one
сортируем
ORDER BY
и выбираем
SELECT
Чтобы отсортировать должно быть все выбрано (это не значит отфетчено).
Кроме того, в сортировке могут учавствовать скаляры и прочее из select list, а оно уже должно быть посчитано.
-2-
Обсуждать порядок выполнения кляуз в отрыве от плана допустимо только для джуниора. Да и само понятие "выполняются" неоднозначно.
Фаза execute. А что некорректно?
15 май 14, 13:27    [16020868]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
цкуекукеук
Guest
dbms_photoshop
new_one
сортируем
ORDER BY
и выбираем
SELECT
Чтобы отсортировать должно быть все выбрано (это не значит отфетчено).
Кроме того, в сортировке могут учавствовать скаляры и прочее из select list, а оно уже должно быть посчитано.


Вот про это и речь, что select может означать также и получение записей.
В плане кстати, так и есть.
15 май 14, 13:30    [16020893]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
цкуекукеук
Вот про это и речь, что select может означать также и получение записей.
В плане кстати, так и есть.
Полагаю после уточнения "Фаза execute" неоднозначность пропала?
select понималось как кляуза запроса, а не как выборка (он же фетчь), простите мой французский.
15 май 14, 13:35    [16020937]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
new_one
Member

Откуда:
Сообщений: 4443
Данные считываются сначала.
Т.е FROM подразумевает, что тут как бы идет доступ к блокам.


Хотел еще добавить, что

ORDER BY
и выбираем
--
Тут все аналитические функции и потом возвращаем
--
SELECT
15 май 14, 13:37    [16020964]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
-2-
пыщ-пыщ-пыщ
new_one,
последние два местами поменять
Обсуждать порядок выполнения кляуз в отрыве от плана допустимо только для джуниора. Да и само понятие "выполняются" неоднозначно.
+1, оптимизатор слишком умный сейчас :)
15 май 14, 14:19    [16021262]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
stax..
Guest
dbms_photoshop
Чтобы отсортировать должно быть все выбрано (это не значит отфетчено).

Чтобы сгрупировать ...

dbms_photoshop
new_one,

При собеседовании на джуниора обычно просят раположить кляузы в порядке, в котором они выполняются:
FROM
GROUP BY
HAVING
ORDER BY
SELECT
WHERE
После понимания как работает вопрос должен отпасть сам собой.
При собеседовании на мидла уже надо знать дополнительные ключевые слова такие как connect by, sample etc и тоже порядок их выполнения.

добавте DISTINCT

ps
для меня поведение было "неоднозначно"

......
stax
15 май 14, 14:28    [16021320]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
stax..
Чтобы сгрупировать ...
Да, согласен.
stax..
добавте DISTINCT
А что это меняет/усложняет?
15 май 14, 14:43    [16021441]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
new_one
Данные считываются сначала.
Т.е FROM подразумевает, что тут как бы идет доступ к блокам.
Разница вот только все или не все.
Сравни чтения до возврата первой строки с сортировкой и без:
declare
   i   int := 0;
begin

   for x in (select rowid from big_tbl order by 1)
   loop
      i   := i + 1;
      dbms_output.put_line(x.rowid);
      exit when i = 1;
   end loop;

end;
/

PS. Когда выполняются выражения в кляузе select (все таки ее имеет смысл поставить чуть раньше) хорошо подсказывает псевдостолбец rownum.
15 май 14, 15:01    [16021581]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
stax..
Guest
dbms_photoshop
stax..
Чтобы сгрупировать ...
Да, согласен.
stax..
добавте DISTINCT
А что это меняет/усложняет?

я напр не задумывался что напр
select distinct deptno ... from emp
и
select deptno ... from emp group by deptno
ето разное

тоесть насчет порядка выполнений
group by
групповая ф-ція (over)
distinct


ps
SELECT я бы поставил перед group by

.....
stax
15 май 14, 15:10    [16021659]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
Elic
Member

Откуда:
Сообщений: 29977
dbms_photoshop
PS. Когда выполняются выражения в кляузе select (все таки ее имеет смысл поставить чуть раньше) хорошо подсказывает псевдостолбец rownum.
И что же он подсказывает ниже?
declare 
  n number;
  cursor c is select  1/(1/mod(rownum,1000)) from all_objects;
begin
  open c;
  fetch c into n;
  dbms_output.put_line(n);
  for i in 2 .. 999 loop
    fetch c into n;
  end loop;
  dbms_output.put_line(n);
  fetch c into n;
end;
/
1
999
declare
*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at line 12
15 май 14, 15:42    [16021865]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
Я и ёжик
Member

Откуда: СПб
Сообщений: 1815
dbms_photoshop
Полагаю после уточнения "Фаза execute" неоднозначность пропала?


Скорее увеличилась), при "Фаза execute" для операторов select чаще всего ничего не выполняется вообще.
А порядок кляуз при выполнении вещь условная, они скорее выполняются "одновременно" или точнее "конвеерно". Я бы заменил слово "выполняются", на "Какому порядку выполняения кляуз должен соответтствовать результат, если бы кляузы выполнялись в порядке". Этот порядок насколько понимаю задает стандарт SQL и результат должен соответствовать этому порядку, а уж каким образом оптимизатор и среда исполнения добъются этого соответствия их дело.
15 май 14, 15:45    [16021886]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Elic
И что же он подсказывает ниже?
Что выполняется то, что необходимо для фетча. А что не так?
С добавлением order by свалилось бы на первом фетче.
15 май 14, 22:49    [16024093]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
Я и ёжик
Скорее увеличилась), при "Фаза execute" для операторов select чаще всего ничего не выполняется вообще.
Да, фазу я приплел зря.
Я и ёжик
А порядок кляуз при выполнении вещь условная, они скорее выполняются "одновременно" или точнее "конвеерно".
Почему условная?
Ведь однозначно известно что выполняется сначала: аналитика из select-list или фильтрация в where.
Точно также однозначно известно что выполняется сначала: генерация rownum или сортировка и т. д.
Я и ёжик
Я бы заменил слово "выполняются", на "Какому порядку выполняения кляуз должен соответтствовать результат, если бы кляузы выполнялись в порядке".
Не понял выделенное. Можно перефразировать?
Я и ёжик
Этот порядок насколько понимаю задает стандарт SQL
Этот порядок я в оракловой доке не встречал.
Тогда как оракловая специфика по деревьям есть (Oracle processes hierarchical queries as follows).
15 май 14, 22:50    [16024099]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
dbms_photoshop
Member

Откуда: sqlmdx.net
Сообщений: 5151
stax..
тоесть насчет порядка выполнений
group by
групповая ф-ція (over)
distinct
Да, мы там рядом отвечали. 14140858 :)
stax..
SELECT я бы поставил перед group by
Тут действительно скользкий вопрос, потому как аналитика после группировки, а rownum до.
SQL> with t as (select 1 x, 1 id from dual connect by level <= 3)
  2  select count(*) over () cnt, max(rownum) max_rn
  3  from t
  4  group by x;

       CNT     MAX_RN
---------- ----------
         1          3

SQL>
SQL> with t as (select 1 x, 1 id from dual connect by level <= 3)
  2  select distinct count(*) over () cnt
  3  from t;

       CNT
----------
         3

SQL>
SQL> with t as (select 1 x, 1 id from dual connect by level <= 3)
  2  select distinct count(*) over () cnt
  3  from t
  4  group by x;

       CNT
----------
         1
15 май 14, 23:04    [16024189]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
-2-
Member

Откуда:
Сообщений: 15330
dbms_photoshop
Точно также однозначно известно что выполняется сначала: генерация rownum или сортировка
Логическая сортировка одно, а физическая может оказаться sort nosort, на самом деле выполняясь на первом этапе.
15 май 14, 23:27    [16024315]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
абсурд все жестче и жестче
15 май 14, 23:30    [16024332]     Ответить | Цитировать Сообщить модератору
 Re: Объясните поведение аналитической функции  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
И ведь еще не дошли до всяких изощрений типа group by и distinct placement, двукратных выполнений при сортировке по алиасу недетерминированных функций и кучи прочего :) да только со списком селекта можно страниц на 10 растянуть
15 май 14, 23:37    [16024367]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Oracle Ответить