Restar columnas de consultas de BigQuery independientes
Sep 10 2020
Tengo dos consultas de BigQuery separadas en las que tomé la suma de los casos confirmados para una fecha determinada, los agrupé por región y los ordené en orden descendente por casos.
SELECT region, SUM(confirmed_cases) AS total_cases FROM provincedata WHERE date BETWEEN '2020-08-01' AND '2020-08-02' GROUP BY region ORDER BY total_cases DESC
SELECT region, SUM(confirmed_cases) AS total_cases FROM provincedata WHERE date BETWEEN '2020-08-31' AND '2020-09-01' GROUP BY region ORDER BY total_cases DESC
Quiero calcular la diferencia entre total_casesla primera y la segunda consulta y agrupar y ordenar por región y orden descendente por la diferencia en orden descendente.
Respuestas
1 MikhailBerlyant Sep 10 2020 at 19:19
A continuación se muestra para SQL estándar de BigQuery
La forma más sencilla es reutilizar las consultas con las que ya se siente cómodo (en lugar de reescribir las cosas)
#standardSQL
WITH `project.dataset.query1` AS (
SELECT region, SUM(confirmed_cases) AS total_cases
FROM provincedata
WHERE DATE BETWEEN '2020-08-01' AND '2020-08-02'
GROUP BY region
), `project.dataset.query2` AS (
SELECT region, SUM(confirmed_cases) AS total_cases
FROM provincedata
WHERE DATE BETWEEN '2020-08-31' AND '2020-09-01'
GROUP BY region
)
SELECT region, q1.total_cases - q2.total_cases AS total_cases_difference
FROM `project.dataset.query1` q1
JOIN `project.dataset.query2` q2
USING(region)
ORDER BY total_cases_difference DESC
GMB Sep 10 2020 at 19:36
Esto podría expresarse de manera más eficiente con agregación condicional:
select
region,
sum(case when date between '2020-08-01' and '2020-08-02' then confirmed_cases else 0 end) total_cases_1,
sum(case when date between '2020-08-31' and '2020-09-02' then confirmed_cases else 0 end) total_cases_2,
sum(case when date between '2020-08-01' and '2020-08-02' then confirmed_cases else - confirmed_cases end) diff
from provincedata
where
date between '2020-08-01' and '2020-08-02'
or date between '2020-08-31' and '2020-09-01'
group by region
order by diff desc