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
.
只需检查 null
或 0
列 area
:
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;
我需要计算 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
.
只需检查 null
或 0
列 area
:
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;