Я также не вижу ничего плохого в группе по свертке, как говорил Фелипе. Для большей ясности я выполнил этот запрос:
with tb1 as
(
select 'DN' as geography
,'1012658993824' as SKU
,1 as pageview
union all
select 'KR' as geography
,'1012658993825' as SKU
,7 as pageview
)
select geography
,sum(pageview) as addition
,count(pageview) as count
,count(distinct(case when pageview between 1 and 5 then SKU end)) as PV_from_0_to_5
,count(distinct(case when pageview between 6 and 10 then SKU end)) as PV_from_6_to_10
, ARRAY_AGG(case when pageview between 1 and 5 then SKU end IGNORE NULLS) PV_from_0_to_5_agg
, ARRAY_AGG(case when pageview between 6 and 10 then SKU end IGNORE NULLS) PV_from_6_to_10_agg
from tb1
group by rollup (geography)
Вы увидите, что вы получили дополнение 8 и счет 2 для первой строки. Это означает, что на самом деле у вас есть и просмотр страниц 1 и просмотр страниц 7. Следовательно, вы получите ожидаемый результат.
Если вы хотите получить запрошенный результат, вам нужно явно использовать сумму просмотров страниц. То есть:
with tb1 as
(
select 'DN' as geography
,'1012658993824' as SKU
,1 as pageview
union all
select 'KR' as geography
,'1012658993825' as SKU
,7 as pageview
)
select geography,sum(pageview) as addition
,CAST(sum(pageview)<5 AND sum(pageview)>0 AS INT64) as PV_from_0_to_5
,CAST(sum(pageview)>5 AND sum(pageview)<10 AS INT64) as PV_from_6_to_10
from tb1
group by rollup (geography)