Функция окна SQL сгруппирована, но по-прежнему получает «должно быть агрегатным выражением или фигурировать в предложении GROUP BY»
У меня есть запрос SQL (presto), скажем так:
select
id
, product_name
, product_type
, sum(sales) as total_sales
, sum(sales) over (partition by type) as sales_by_type
from some_table
group by 1,2,3
Когда я запускаю это, я получаю сообщение об ошибке, сообщающее мне, что оконная функция должна появиться в
GROUP BY
пункт. Лучшее решение разбить это на подзапрос? Или мне нужно внести некоторые изменения в синтаксис, чтобы это сработало?
2 ответа
Если вам нужен общий объем продаж для данного типа, вам нужно вложить
sum()
s:
select id, product_name, product_type,
sum(sales) as total_sales,
sum(sum(sales)) over (partition by type) as sales_by_type
from some_table
group by 1,2,3;
Если вы также хотите получить общую сумму всех продаж, тогда:
select id, product_name, product_type,
sum(sales) as total_sales,
sum(sum(sales)) over (partition by type) as sales_by_type,
sum(sum(sales)) over () as total_total_sales
from some_table
group by 1,2,3;
Вам нужно что-то вроде ниже
select
id
, product_name
, product_type
, sum(sales) over () as total_sales
, sum(sales) over (partition by type) as sales_by_type
from some_table
или же
select
id
, product_name
, product_type
, sum(sales) over (partition by (select 1)) as total_sales
, sum(sales) over (partition by type) as sales_by_type
from some_table
Оба они работают на сервере sql. Не уверен, что / если это сработает для presto.
Я также видел вариации ниже.
over (partition by null)