Функции окна обеспечивают наилучшее решение этой проблемы. То, что вы пытаетесь достичь, - это два уровня агрегации в одном запросе таблицы.
select id
,count(*)
,sum(count(*)) over() as CountOfAll
,(1.0 * count(*))/sum(count(*)) over() as Pct
from some_table
group by id
В тех случаях, когда знаменатель может привести к нулю, вы должны обернуть расчет рСТ в сазе, чтобы избежать деления на ноль ошибок:
select id
,count(*)
,sum(count(*)) over() as CountOfAll
,case when sum(count(*)) over() = 0
then 0
else (1.0 * count(*))/sum(count(*)) over()
end as Pct
from some_table
group by id
Оконные функции открывают намного больше возможности для создания совокупных результатов в рамках одного запроса и являются достойным инструментом для добавления в ваш инструмент инструментов SQL!
Вы можете удалить умножение 100, если вам просто нужно значение/sumofvalue –