Как включить три или более агрегаторов в SQL-запрос? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть таблица с именем retail, в которой хранятся items и их price вместе с date покупки.Я хочу узнать общее количество проданных уникальных предметов в месяц .

Это запрос sql, который я пробовал

select date_trunc('month', date) as month, sum(count(distinct(items))) as net_result from retail group by month order by date;

Но я получаю следующую ошибку

ERROR:  aggregate function calls cannot be nested

Теперь я искал похожие посты stackoverflow, одна из которых вызовы агрегатных функций postgres не могут быть вложенными , но я не могу скопировать его для создания правильного запроса sql.

Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

Из вашего описания, это не кажется, что вы должны гнездиться агрегатные функции, граф (отличный товар) строительство даст вам подсчет различных проданных товаров, например, так:

1002

Если у вас есть столбец с именем Item_Count (скажем, есть ли строка в таблице для каждой проданной вещи, но продажа может включать в себя, например, три виджета)

1005 *
0 голосов
/ 10 декабря 2018

Я подозреваю, что ваш оператор group by сгенерирует Error, потому что ваш столбец month является столбцом условия, и вы не можете использовать тот же уровень в своем запросе, поэтому введите вместо него полное выражение.

select
  month,
  sum(disct_item) as net_results
from
  (select 
     date_trunc('month', date) as month, 
     count(distinct items) as disct_item
   from 
     retail 
   group by 
     date_trunc('month', date)
   order by 
     date) as tbl
group by
  month;

Вы не можете создать вложенный агрегат, поэтому сначала оборачиваете count в subquery, а после этого во внешнем наборе sum, чтобы выполнить операцию.

0 голосов
/ 10 декабря 2018

Использовать подзапросы:

Select month, sum(citems) as net_result 
   from 
       (select 
           date_trunc('month', date) as month, 
           count(distinct(items)) as citems 
        from 
           retail 
        group by month 
        order by date
        )
...