Я почти уверен, что для этого требуется два уровня агрегации, потому что исходные данные не содержат информации для группировки имен.Вам нужна одна агрегация для классификации имен и одна для вычисления окончательных результатов.
Тем не менее, я бы написал это как:
select (case when sum_metric > 10 then name else 'others' end) as group_name,
sum(sum_metric) as metric
from (select name, sum(metric) as sum_metric
from mydata
group by name
) t
group by group_name;
При этом вы можете использовать select distinct
иоконная функция для чего-то непостижимого, например:
select distinct (case when sum(metric) > 10 then name else 'others' end),
sum(sum(metric)) over (partition by (case when sum(metric) > 10 then name else 'others' end)) as metric
from mydata
group by name;
Однако select distinct
действительно выполняет другую агрегацию.Таким образом, это устраняет подзапрос, но не работу.