Percent of total: Is there a more efficient way than using a subselect? I have an existing ASSET_SUMMARY_VW view:

+-----------------------+---------------+
|      ASSET_TYPE       |     COST      |
+-----------------------+---------------+
| TRANSPORTATION        | 1,000,000,000 |
| TRANSPORTATION        |   500,000,000 |
| TRANSPORTATION        |   500,000,000 |
| ACTIVE TRANSPORTATION |   100,000,000 |
| ACTIVE TRANSPORTATION |    50,000,000 |
| STORMWATER MANAGEMENT |   500,000,000 |
+-----------------------+---------------+


I want to GROUP BY and calculate the percentage of each ASSET_TYPE compared to the total cost:

+-----------------------+---------------+------------------+
|      ASSET_TYPE       |     COST      | PERCENT_OF_TOTAL |
+-----------------------+---------------+------------------+
| TRANSPORTATION        | 2,000,000,000 |             75.4 |
| ACTIVE TRANSPORTATION |   150,000,000 |              5.6 |
| STORMWATER MANAGEMENT |   500,000,000 |             18.8 |
+-----------------------+---------------+------------------+


I can divide the COST by a subselect that gets the total cost:

SELECT 
    ASSET_TYPE
    ,SUM(COST) AS COST
    ,SUM(COST/(
               SELECT 
                   SUM(COST) 
               FROM 
                   USER.ASSET_SUMMARY_VW)
               ) AS PERCENT_OF_TOTAL
FROM 
    USER.ASSET_SUMMARY_VW
GROUP BY 
    ASSET_TYPE


However, it's occurred to me that using a subselect is inefficient. Is there a faster way of doing this?
with data as
(
  select 'TRANSPORTATION' as asset_type, 2000000000 as cost from dual union all
  select 'ACTIVE TRANSPORTATION' as asset_type, 150000000 as cost from dual union all
  select 'STORMWATER MANAGEMENT' as asset_type, 500000000 as cost from dual
  )
select
  data.asset_type, data.cost, 
  trunc(ratio_to_report(data.cost) over () * 100, 1) as percent_of_total
from data;

ASSET_TYPE                  COST PERCENT_OF_TOTAL
--------------------- ---------- ----------------
TRANSPORTATION        2000000000             75.4
ACTIVE TRANSPORTATION  150000000              5.6
STORMWATER MANAGEMENT  500000000             18.8


RATIO_TO_REPORT still works with your updated data:

with data as
(
  select 'TRANSPORTATION' as asset_type, 1000000000 as cost from dual union all
  select 'TRANSPORTATION' as asset_type, 500000000 as cost from dual union all
  select 'TRANSPORTATION' as asset_type, 500000000 as cost from dual union all
  select 'ACTIVE TRANSPORTATION' as asset_type, 100000000 as cost from dual union all
  select 'ACTIVE TRANSPORTATION' as asset_type, 50000000 as cost from dual union all
  select 'STORMWATER MANAGEMENT' as asset_type, 500000000 as cost from dual
  )
select
  data.asset_type, sum(data.cost), 
  trunc(ratio_to_report(sum(data.cost)) over () * 100, 1) as percent_of_total
from data
  group by data.asset_type
;

ASSET_TYPE            SUM(DATA.COST) PERCENT_OF_TOTAL
--------------------- -------------- ----------------
TRANSPORTATION            2000000000             75.4
ACTIVE TRANSPORTATION      150000000              5.6
STORMWATER MANAGEMENT      500000000             18.8