Pull to refresh

Comments 9

Документация говорит, что работает: www.postgresql.org/docs/9.4/static/tutorial-window.html

Кстати, оконные функции мне недавно неплохо помогли перенумеровать существующие записи в базе (различная нумерация в зависимости от значения других колонок), о чём я написал в своём блоге.
Про дату и время в постгресе важно помнить, что тип timestamptz (и подобные с пометкой with time zone) на самом деле не хранят часовой пояс, а только преобразуют данные в UTC при записи и в локальный часовой пояс при чтении (задаётся c помощью SET TIME ZONE 'Europe/Moscow';, например).
В этой ветке есть ещё информация: habrahabr.ru/company/mailru/blog/242645/#comment_8117979
> смотря что будите считать

когда подумалось, что тся/ться — это дно, снизу постучался «будите».
Судя по тексту, для автора русский язык не является родным, так что простим такой пустяк.
Судя по ссылкам — это перевод. Отсюда и иностранная стилистика.

С такими прощениями мы через 10 лет получим падонкоффский слэнг в качестве второго государственного.
Прошу прощенья за перевод, в исходном варианте статья была немного сложной, хотелось потратить на неё немного больше времени, но не получилось.
Интересно, а почему этот код:

with september_sales as (
    select distinct sku, 
    sum(price) OVER (PARTITION BY sku) as revenue,
    count(1) OVER (PARTITION BY sku) as sales_count,
    sum(price) OVER (PARTITION by 0) as sales_total
    from invoice_items
    where date_part('month',created_at) = 9
)

select sku, 
    revenue::money, 
    sales_count, 
    sales_total::money,
    trunc((revenue/sales_total * 100),4) as percentage
from september_sales


Не написать вот так?

select sku, 
    revenue::money, 
    sales_count, 
    sales_total::money,
    trunc((revenue/sales_total * 100),4) as percentage
from (
    select distinct sku, 
    sum(price) OVER (PARTITION BY sku) as revenue,
    count(1) OVER (PARTITION BY sku) as sales_count,
    sum(price) OVER (PARTITION by 0) as sales_total
    from invoice_items
    where date_part('month',created_at) = 9
) t


Вроде проще и читается и пишется. Особенно если еще джоины и подселекты нужно добавить. Или база по другому будет обрабатывать?
Обычно запросы много сложнее, и with удобно использовать как шаблон запроса, который используется многократно.
Only those users with full accounts are able to leave comments. Log in, please.