Postgres SQL: горячее получение подсчета и итога в одном и том же операторе выбора - PullRequest
1 голос
/ 03 февраля 2020

Я хочу получить таблицу с сегментом, продажами сегмента и продажами сегмента от общего объема продаж.

У меня есть таблица, которая предоставляет мне имя сегмента и продажи внутри сегмента, как мне это сделать? добавить информацию об общем объеме продаж в эту таблицу?

Моя идея заключалась в следующем:

select segment, segment_sales, segment_sales/sum(segment_sales)
from sales1
group by 1;

Однако я получаю следующую ошибку: SQL Ошибка [42803]: ОШИБКА: колонка "gment_sales " "должен присутствовать в предложении GROUP BY или использоваться в статистической функции Position: 27

1 Ответ

0 голосов
/ 03 февраля 2020

Вы можете использовать оконные функции. Я думаю, что это делает то, что вы хотите:

select 
    segment, 
    sum(segment_sales) total_segment_sales, 
    sum(segment_sales)/sum(sum(segment_sales)) over() segment_sales_ratio
from sales1
group by segment;

Этот запрос группирует строки, которые имеют одинаковые segment и суммы segment_sales в каждой группе, в столбце с псевдонимом total_segment_sales. Третий столбец делит сумму продаж текущего сегмента с общими продажами по всей таблице.

С другой стороны, если у вас есть только одна строка на сегмент в исходной таблице, то это немного проще: вам не нужно агрегирование:

select 
    segment, 
    segment_sales, 
    segment_sales/sum(segment_sales) over() segment_sales_ratio
from sales1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...