Я не уверен, что это на самом деле возможно вне использования подзапроса. partition by
не меняет количество возвращаемых строк, как group by
, и поэтому ваш код по-прежнему возвращает строку для каждой записи данных. Вы не можете удалить pageViews
из group by
без получения ошибки - потому что, опять же, partition by
фактически не меняет количество строк в результатах, поэтому вам необходимо включить pageViews
в ваш group by
который возвращает неверные результаты.
Запуск partition by
без вашего group by
SELECT [year] AS [year],
Country AS Country,
SUM(pageViews) OVER(PARTITION BY [year]) AS Total
from raw_data
вернет:
Year Country Total
2018 US 15
2018 US 15
2019 US 30
2019 US 30
2019 US 30
2019 US 30
Выбор результатов запроса на раздел и тогда группировка решит это:
select *
from
(
SELECT [year] AS [year],
Country AS Country,
SUM(pageViews) OVER(PARTITION BY [year]) AS Total
from raw_data
) as outer_query
group by outer_query.[year], outer_query.Country, outer_query.Total
, но я с GMB задаюсь вопросом, почему вам нужно сделать что-то подобное, когда будет достаточно простого агрегата.
- edit - Хотя мой ответ даст вам правильные результаты, лучше не обходить стороной, если есть более практичное решение. У Гордона есть правильный способ реализовать это - это должен быть принятый ответ.