Acho que o motivo pelo qual você deseja eliminar a subconsulta é evitar a varredura da tabela de usuários duas vezes. Lembre-se que o total é a soma das contagens para cada país.
WITH c AS (
SELECT
country_id,
count(*) AS cnt
FROM users
WHERE cond1=...
GROUP BY country_id
)
SELECT
*,
100.0 * cnt / (SELECT sum(cnt) FROM c) AS percent
FROM c;
Essa consulta cria um pequeno CTE com as estatísticas por país. Ele verificará a tabela de usuários apenas uma vez e gerará um pequeno conjunto de resultados (apenas uma linha por país).
O total (SELECT sum(cnt) FROM c) é calculado apenas uma vez neste pequeno conjunto de resultados, portanto, usa um tempo insignificante.
Você também pode usar uma função de janela:
SELECT
country_id,
cnt,
100.0 * cnt / (sum(cnt) OVER ()) AS percent
FROM (
SELECT country_id, count(*) as cnt from users group by country_id
) foo;
(que é o mesmo que a consulta do nightwolf com os erros removidos lol)
Ambas as consultas levam aproximadamente o mesmo tempo.