SQL将两列分开
我需要用SQL计算人口密度。我有一个包含人口的列和一个包含面积的列,但我不知道如何执行它,我得到了一个零除误差 以下是我尝试过的:SQL将两列分开,sql,division,Sql,Division,我需要用SQL计算人口密度。我有一个包含人口的列和一个包含面积的列,但我不知道如何执行它,我得到了一个零除误差 以下是我尝试过的: select name, population, gdp, area, [population]/[area] as pop_density from country group by name order by gdp; 使用nullif(): 分组依据似乎没有必要 nullif()是一个标准函数,当传入的两个值相等时返回NULL。如果您的数据库不支持它,
select name, population, gdp, area, [population]/[area] as pop_density
from country
group by name
order by gdp;
使用nullif()
:
分组依据
似乎没有必要
nullif()
是一个标准函数,当传入的两个值相等时返回NULL
。如果您的数据库不支持它,您可以使用大小写
表达式执行相同的操作。为什么需要分组依据
不需要分组
即使您确实需要
分组依据
,也无法选择非聚合列,如:人口、gdp、面积
只需为列
区域检查null
或0
:
select
name, population, gdp, area,
case coalesce(area, 0)
when 0 then null
else population / area
end as pop_density
from country
order by gdp
只需将where子句添加为
select name, population, gdp, area,
[population]/[area] as pop_density
from country where area
NOT IN (NULL,0) group by name
order by gdp
或者,您可以通过Case
语句处理除数区域的值0
.......Case when Area IN (Null,0)
then 0
else
[population]/[area]
表中的任何面积值都包含零或null?如Josh。。。。。。遗憾的是,在您的数据区域中有一些0值。您可以通过以下方式修复它:当区域为0时,人口/区域结束为pop_density。有,我试图添加一条语句:where area>0,但我仍然无法使其工作。请提供示例数据、所需结果和适当的数据库标记。哪个数据库?这将筛选不需要的记录。@Ram Ghadiyaram,请阅读我们的评论,我已经尝试使用示例在线sqllite数据库。我们向用户询问了样本数据和数据库名称。他从未提及或回答我们的评论。我们可以在不同的数据库中编写不同的逻辑。我希望这能给你一些澄清。
.......Case when Area IN (Null,0)
then 0
else
[population]/[area]
select name, population, gdp, area, [population]/[area] as pop_density
from country
where area is not null and area is not 0
group by name
order by gdp;