для чего полезен ORDER BY, когда я делаю PARTITION BY - PullRequest
0 голосов
/ 11 ноября 2018

Я начал изучать метод PARTITION BY с агрегатными функциями, но я не понимаю, почему я должен использовать ORDER BY для в этом запросе. я хочу СУММИТЬ общую сумму продаж в $ на «стандартной бумаге» в каждом году это мой код:

    SELECT standard_amt_usd,
   DATE_TRUNC('year', occurred_at) as year,
   SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
   ORDER BY occurred_at) AS running_total
   FROM orders ; 

ответы, которые я получаю, верны, но я до сих пор не понимаю, почему нужно использовать здесь ORDER BY и что произойдет, если я не буду его использовать? спасибо за помощь:)

Ответы [ 2 ]

0 голосов
/ 11 ноября 2018

Запустите этот запрос:

SELECT standard_amt_usd,
       DATE_TRUNC('year', occurred_at) as year,
       SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
                                   ORDER BY occurred_at
                                  ) AS running_total,
       SUM(standard_amt_usd) OVER (PARTITION BY DATE_TRUNC('year', occurred_at) 
                                  ) AS group_total
FROM orders ; 

Возможно, вы сразу увидите разницу. ORDER BY говорит сделать суммирование "до" этой строки. Без ORDER BY сумма будет одинаковой во всех строках с одинаковым ключом PARTITION BY.

0 голосов
/ 11 ноября 2018

ORDER BY имеет в основном два правила:

  1. Чтобы фактически определить, как работает другая функция. Это правда когда используя TOP, скажем, или внутри функции разделения OVER (). Это не требует сортировки, это просто говорит "это определение только делает смысл, если мы рассмотрим строки в наборе результатов в конкретный заказ - вот тот, который я хочу использовать "
  2. Чтобы задать порядок сортировки набора результатов. Это правда, когда это предложение ORDER BY для самого внешнего оператора, который является частью конкретный запрос - не в подзапросе, CTE, разделении OVER () функция и т. д.
...