Jeg gætter på, at grunden til, at du vil fjerne underforespørgslen, er for at undgå at scanne brugertabellen to gange. Husk at totalen er summen af tællingerne for hvert land.
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;
Denne forespørgsel bygger en lille CTE med statistikken pr. land. Den scanner kun brugertabellen én gang og genererer et lille resultatsæt (kun én række pr. land).
Totalen (SELECT sum(cnt) FROM c) beregnes kun én gang på dette lille resultatsæt, så det bruger ubetydelig tid.
Du kan også bruge en vinduesfunktion :
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;
(hvilket er det samme som nightwolfs forespørgsel med fejlene fjernet lol )
Begge forespørgsler tager omtrent samme tid.