Comments 9
sum(price) OVER (PARTITION by 0)А SUM(price) OVER() (т.е. пустой OVER) не работает в Постгресе что ли?
0
Документация говорит, что работает: www.postgresql.org/docs/9.4/static/tutorial-window.html
Кстати, оконные функции мне недавно неплохо помогли перенумеровать существующие записи в базе (различная нумерация в зависимости от значения других колонок), о чём я написал в своём блоге.
Кстати, оконные функции мне недавно неплохо помогли перенумеровать существующие записи в базе (различная нумерация в зависимости от значения других колонок), о чём я написал в своём блоге.
+2
Про дату и время в постгресе важно помнить, что тип timestamptz (и подобные с пометкой with time zone) на самом деле не хранят часовой пояс, а только преобразуют данные в UTC при записи и в локальный часовой пояс при чтении (задаётся c помощью
В этой ветке есть ещё информация: habrahabr.ru/company/mailru/blog/242645/#comment_8117979
SET TIME ZONE 'Europe/Moscow';
, например).В этой ветке есть ещё информация: habrahabr.ru/company/mailru/blog/242645/#comment_8117979
+3
> смотря что будите считать
когда подумалось, что тся/ться — это дно, снизу постучался «будите».
когда подумалось, что тся/ться — это дно, снизу постучался «будите».
-6
Судя по тексту, для автора русский язык не является родным, так что простим такой пустяк.
+2
Судя по ссылкам — это перевод. Отсюда и иностранная стилистика.
С такими прощениями мы через 10 лет получим падонкоффский слэнг в качестве второго государственного.
С такими прощениями мы через 10 лет получим падонкоффский слэнг в качестве второго государственного.
-1
Интересно, а почему этот код:
Не написать вот так?
Вроде проще и читается и пишется. Особенно если еще джоины и подселекты нужно добавить. Или база по другому будет обрабатывать?
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
Вроде проще и читается и пишется. Особенно если еще джоины и подселекты нужно добавить. Или база по другому будет обрабатывать?
+1
Sign up to leave a comment.
Articles
Change theme settings
Охватывающий SQL в Postgres