Вы можете использовать оконные функции. Я думаю, что это делает то, что вы хотите:
select
segment,
sum(segment_sales) total_segment_sales,
sum(segment_sales)/sum(sum(segment_sales)) over() segment_sales_ratio
from sales1
group by segment;
Этот запрос группирует строки, которые имеют одинаковые segment
и суммы segment_sales
в каждой группе, в столбце с псевдонимом total_segment_sales
. Третий столбец делит сумму продаж текущего сегмента с общими продажами по всей таблице.
С другой стороны, если у вас есть только одна строка на сегмент в исходной таблице, то это немного проще: вам не нужно агрегирование:
select
segment,
segment_sales,
segment_sales/sum(segment_sales) over() segment_sales_ratio
from sales1;