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。如果您的数据库不支持它,

我需要用SQL计算人口密度。我有一个包含人口的列和一个包含面积的列,但我不知道如何执行它,我得到了一个零除误差

以下是我尝试过的:

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;