Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Други мои, к своему стыду, узнал, что оказывается SUM() OVER () можно заставить считать набегающий итог без указания ROWS. Совершенно случайно столкнулся, что если в SUM() задать ORDER BY так, что ЗНАЧЕНИЯ поля по которому идет сортировка РАЗЛИЧАЮТСЯ, то SUM() будет выводиться отдельно на каждую "смену" значения. Этакое квантование для меня оказалось полностью неожиданным. Например Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Совершенно ожидаемое поведение. SUM() одна для всей группы, указанной в PARTITION BY НО в то же время Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Превращается в классический набегающий итог. ID - уникальное значение для каждой строчки. А вот более заковыристо Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Обратите в нимание, что в разрезе группы А поле dt имеет два уникальных значения, и соответственно SUM посчитано для "групп внутри групп" Получается, что ORDER BY задает не только порядок вычисления внутри окна, что отражено в документации, но и разбивает группу, указанную в PARTITION BY на подгруппы! Скажите, это вообще штатное поведение? Может оно прямо описано в доках, а я просто не туда глядел? Ну и, наконец, какие ф-и кроме SUM() там брутально меняют свое поведение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:28 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Cammomile, это документированное поведение, связано с умолчательным размером и типом окна в отсутствии его явного указания через ROWS BETWEEN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:33 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Cammomile, если что, по умолчанию окно задается как RANGE, а не ROWS. Поэтому строки с одинаковым значением поля сортировки попадают в одно окно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:36 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
А можно текста документации с пояснениями. Очевидно, что у меня что-то не складывается в единую картину. Там же написано, что ORDER BY задает "логический порядок вычисления" В моей картине мира, когда мы говорим про СУММУ, это вообще ничего не должно менять. Ведь 1 + 2 + 3 это то же самое, что 2 + 1 + 3, ЛОГИЧЕСКИ. А у сервера, получается, что если задан порядок, то сумма это не 1+2+3 , а 0 +1 1+2 2+3 , три суммы вместо одной... не очень логично? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:39 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
CammomileА можно текста документации с пояснениями. Очевидно, что у меня что-то не складывается в единую картину. Там же написано, что ORDER BY задает "логический порядок вычисления" В моей картине мира, когда мы говорим про СУММУ, это вообще ничего не должно менять. Ведь 1 + 2 + 3 это то же самое, что 2 + 1 + 3, ЛОГИЧЕСКИ. А у сервера, получается, что если задан порядок, то сумма это не 1+2+3 , а 0 +1 1+2 2+3 , три суммы вместо одной... не очень логично? а если в твою картину добавить интервал? )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:40 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
CammomileОбратите в нимание, что в разрезе группы А поле dt имеет два уникальных значения, и соответственно SUM посчитано для "групп внутри групп" Я вижу комбинацию того, что мы имеем в первом и втором запросах. Нарастающий итог по tag снаружи, и общая сумма по dt внутри. Более того, поскольку dt двух записей, в которые ты показываешь пальцем, полностью идентично, любое иное поведение немедленно привело бы к обвинениям в неоднозначности (в зависимости от того, какая из двух неразличимых записей учтётся раньше, можно получить два различных выходных набора). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:41 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Cammomile, у сервера получается "логическое" окно шириной от всех значений, предшествующих, текущему, включая все значения, равные текущему. rabge between unbounded preceding amd current row. что не понятно-то? BOL Читать нотацию: https://docs.microsoft.com/ru-ru/sql/t-sql/queries/select-over-clause-transact-sql Примечание If ORDER BY is not specified entire partition is used for a window frame.Если предложение ORDER BY не указано, то для рамки окна используется весь раздел. Это относится только к тем функциям, которым не требуется предложение ORDER BY. Если предложение ROWS или RANGE не указаны, а указано предложение ORDER BY, то в качестве значения по умолчанию для рамки окна используется RANGE UNBOUNDED PRECEDING AND CURRENT ROW. Это относится только к тем функциям, которые могут принимать дополнительную спецификацию ROWS или RANGE. Например, ранжирующая функция не может принимать предложение ROWS или RANGE, поэтому данная рамка окна не может использоваться, даже несмотря на наличие предложения ORDER BY, а предложение ROWS или RANGE отсутствует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:52 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Cammomile, так что, если что - кури в сторону понимания разницы между окном строк (ROWS) и окном диапазонов значений (RANGE) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:54 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
Добрый Э - ЭхCammomile, так что, если что - кури в сторону понимания разницы между окном строк ( ROWS ) и окном диапазонов значений ( RANGE ) Кажется, это ключевое. Пошел курить, благодарю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 13:58 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
А вот еще вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:29 |
|
||
|
Новое в оконный функциях (Недокументированное поведение SUM()) ?
|
|||
|---|---|---|---|
|
#18+
А вот еще вопрос. То, что OVER (ORDER BY) задает порядок не только в работе окна, но и всего внешнего запроса, это тоже описано где-то, или просто совпадение? Код: sql 1. 2. Планы запросов идентичные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2017, 15:33 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39576795&tid=1690600]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
54ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 366ms |

| 0 / 0 |
