SQL 划分 2 列

SQL divide 2 columns

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

这是我尝试过的:

select name, population, gdp, area, [population]/[area] as pop_density 
from country 
group by name 
order by gdp;

使用nullif():

select name, population, gdp, area,
       population / nullif(area, 0) as pop_density
from country
order by gdp;

group by好像没必要。

nullif()是标准函数,当传入的两个值相等时returnsNULL。如果你的数据库不支持它,你可以用 case 表达式做同样的事情。

为什么需要 group by
不需要分组。
即使您确实需要 group by,您也不能 select 非聚合列,例如:
population, gdp, area.
只需检查 null0area:

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 clause as

       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] 
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;