Sql 如何忽略子查询中的空值?
我有一个输出这些结果的查询Sql 如何忽略子查询中的空值?,sql,postgresql,Sql,Postgresql,我有一个输出这些结果的查询 "year" avg_carbon company_carbon 1998 7909.0000000000000000 1999 19465.500000000000 2000 19478.000000000000 2001 182679.274509803922 3284586 2002 179821.156862745098 3165363 2003 190188.882352941176
"year" avg_carbon company_carbon
1998 7909.0000000000000000
1999 19465.500000000000
2000 19478.000000000000
2001 182679.274509803922 3284586
2002 179821.156862745098 3165363
2003 190188.882352941176 3675122
2004 193355.040000000000 3433656
2005 190449.403846153846 3515522
2006 192247.818181818182 3752861
2007 190654.457627118644 3764109
2008 175522.153846153846 3455017
2009 165951.555555555556 3575654
2010 191000.347222222222 3401381
2011 195159.617647058824 3720983
2012 166948.710144927536 2727370
2013 155486.625000000000 2750040
2014 205681.795454545455 2493060
2015 350699.592920353982 2140280
2016 341955.322033898305 2028865
2017 322747.352000000000 1642010
2018 351676.219298245614 1438365
2019 446680.314285714286 1496520
2020 70971.000000000000
你可以看到2020年、2000年、1999年和1998年,公司的碳排放量为零。对于这些项目,我希望排除行(因此在上面的示例中,数据范围为2001到2019)
这是我的查询,我无法计算如何基于子查询限制null值(我尝试了carbon不是null或carbon!=0)
欢迎任何意见 试试这个:
SELECT * FROM (
select year
,AVG(carbon) AS AVG_carbon
,MAX(carbon) FILTER (WHERE lower(ticker) = 'ibm.us' ) as company_carbon
from "company"."carbon" c
where lower(c.ticker) in (select lower(g4.ticker)
from "company"."General" g4
where industry = (select industry from "company"."General" g3 where lower(g3.ticker) = 'ibm.us' )
)
GROUP BY c.year
)
WHERE company_carbon IS NOT NULL
ORDER BY year ASC
看起来像是使用以下功能的简单过滤器:
select year, AVG(carbon) AS AVG_carbon,
MAX(carbon) FILTER (WHERE lower(ticker) = 'ibm.us') as company_carbon
from "company"."carbon" c
where lower(c.ticker) in (
select lower(g4.ticker)
from "company"."General" g4
where industry = (
select industry
from "company"."General" g3
where lower(g3.ticker) = 'ibm.us'
)
)
GROUP BY c.year
having MAX(carbon) FILTER (WHERE lower(ticker) = 'ibm.us') is not null
order by year ASC;
select year, AVG(carbon) AS AVG_carbon,
MAX(carbon) FILTER (WHERE lower(ticker) = 'ibm.us') as company_carbon
from "company"."carbon" c
where lower(c.ticker) in (
select lower(g4.ticker)
from "company"."General" g4
where industry = (
select industry
from "company"."General" g3
where lower(g3.ticker) = 'ibm.us'
)
)
GROUP BY c.year
having MAX(carbon) FILTER (WHERE lower(ticker) = 'ibm.us') is not null
order by year ASC;