加入MySQL前求和?

加入MySQL前求和?,mysql,sql,join,sum,Mysql,Sql,Join,Sum,我可能有一个SQL查询的基本问题(我正在学习) 我正在跟踪西班牙不同地区的疫苗接种情况 简化一下,我有两个表:一个是区域(ca)及其人口,另一个是区域(ca)、每个数据的日期(时间)和剂量 为了得到西班牙总人口每天接种疫苗的百分比,我需要对每个地区的所有人口求和,然后除以所有地区的剂量之和,然后在这两者之间进行除以 但是,当我进行连接时,每一个总体都会添加到每一行,因此总和非常高(每次区域出现时都会计算一次) 我想我需要在加入之前对所有的人口求和,但是,我使用哪一列来加入呢 是这样的: SELE

我可能有一个SQL查询的基本问题(我正在学习)

我正在跟踪西班牙不同地区的疫苗接种情况

简化一下,我有两个表:一个是区域(ca)及其人口,另一个是区域(ca)、每个数据的日期(时间)和剂量

为了得到西班牙总人口每天接种疫苗的百分比,我需要对每个地区的所有人口求和,然后除以所有地区的剂量之和,然后在这两者之间进行除以

但是,当我进行连接时,每一个总体都会添加到每一行,因此总和非常高(每次区域出现时都会计算一次)

我想我需要在加入之前对所有的人口求和,但是,我使用哪一列来加入呢

是这样的:

SELECT
  time AS "time",
  SUM(SUM(v1.dose)) OVER (ORDER BY time)/'SP_population'
FROM vaccines v1
INNER JOIN
(SELECT SUM(population) AS 'SP_population' FROM ca_population) v2 ON ?????
GROUP BY time
ORDER BY time```

What should the ??? be?

如果我理解正确,您需要一个
交叉连接
。您不再关心区域,因此希望所有行都有一个总体值:

SELECT v.time, p.sp_population, v.daily_dose,
       SUM(SUM(v.daily_dose)) OVER (ORDER BY time) / p.sp_population
FROM (SELECT v.time, SUM(v.dose) as daily_dose
      FROM vaccines v
      GROUP BY v.time
     ) v CROSS JOIN
     (SELECT SUM(population) as sp_population
      FROM ca_population
     ) p
ORDER BY time

样本数据和期望的结果将非常有用。欢迎使用SO。请参阅: