Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从两个表合计SQL计算速率_Mysql_Sql_Join - Fatal编程技术网

Mysql 从两个表合计SQL计算速率

Mysql 从两个表合计SQL计算速率,mysql,sql,join,Mysql,Sql,Join,我是从两个不同的表格中计算出的总数,这两个表格都与试图找出犯罪率对人口的影响有关 这是我的代码: SELECT SUM(INCIDENT_BY_REGION.Total) AS TotalCrime, SUM(REGION.Population) AS TotalPopulation, (TotalCrime/TotalPopulation) AS Rate FROM INCIDENT_BY_REGION JOIN REGION ON INCIDENT_BY_REGION.RegionID =

我是从两个不同的表格中计算出的总数,这两个表格都与试图找出犯罪率对人口的影响有关

这是我的代码:

SELECT SUM(INCIDENT_BY_REGION.Total) AS TotalCrime, 
SUM(REGION.Population) AS TotalPopulation,
(TotalCrime/TotalPopulation) AS Rate
FROM INCIDENT_BY_REGION JOIN REGION
ON INCIDENT_BY_REGION.RegionID = REGION.RegionID;
但我有个错误

错误代码1054:“字段列表”中的未知列“TotalCrime”

我想知道的是人口犯罪率。
有什么建议吗

请尝试下面的内容,在计算速率时不应使用别名。此外,当表达式
和(region.population)=0时使用case更安全,以避免
被零除的错误:

SELECT SUM(INCIDENT_BY_REGION.Total) AS TotalCrime, 
SUM(REGION.Population) AS TotalPopulation,
case when SUM(REGION.Population) > 0 then 
          SUM(INCIDENT_BY_REGION.Total)/SUM(REGION.Population)
     else 0 end AS Rate
FROM INCIDENT_BY_REGION JOIN REGION
ON INCIDENT_BY_REGION.RegionID = REGION.RegionID;

可能的重复不是重复。重复使用别名答案是行不通的。你能解释一下,在另一个问题中,给定的解决方案到底有什么不起作用吗?为什么要重新计算
SUM()
调用?考虑MySQL 8。+ +将很快支持的派生表或CTE。您是正确的,最好创建一个临时表,将计算的数据保存在那里并在需要计算速率时使用该表,但是对于这个例子,我不认为它会创建一个重要的性能问题,所以OP将被发现他正在寻找的东西。mysql中的CTE将非常棒@Parfait@ErayBalkanli . . . 不,冻糕是不对的。也许MySQL 8.0中的CTE会有所帮助,但实现中间结果的开销可能远比只进行求和要昂贵得多。