Solución:
Compruebe ratio_to_report, una de las funciones de ventana anunciadas recientemente:
SELECT state, ratio * 100 AS percent FROM (
SELECT state, count(*) AS total, RATIO_TO_REPORT(total) OVER() AS ratio
FROM [publicdata:samples.natality]
GROUP by state
)
state percent
AL 1.4201828131159113
AK 0.23521048665998198
AZ 1.3332896746620975
AR 0.7709591206172346
CA 10.008298605982642
La modificación de la respuesta de Felipe para el dialecto SQL estándar de BigQuery en lugar del dialecto SQL heredado se ve así:
select state, 100*(state_count / total) as pct
from (
SELECT state, count(*) AS state_count, sum(count(*)) OVER() AS total
FROM `bigquery-public-data.samples.natality`
GROUP by state
) s
La documentación de las funciones analíticas agregadas estándar de SQL BigQuery (también conocidas como ‘funciones de ventana’) está aquí: https://cloud.google.com/bigquery/docs/reference/standard-sql/analytic-function-concepts
Puede hacer una autounión contra el total, utilizando un valor ficticio como clave. Por ejemplo:
SELECT
t1.state AS state,
t1.cnt AS cnt,
100 * t1.cnt / t2.total as percent
FROM (
SELECT
state,
COUNT(*) AS cnt,
1 AS key
FROM
[publicdata:samples.natality]
WHERE state is not null
GROUP BY
state) AS t1
JOIN (
SELECT
COUNT(*) AS total,
1 AS key
FROM
[publicdata:samples.natality]) AS t2
ON t1.key = t2.key
ORDER BY percent DESC
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)