MySQL函数计算24小时平均浓度对应的IAQI和AQI
目录
目标
空气质量指数计算对照表
计算IAQI函数
计算AQI函数
目标
根据空气质量指数标准,通过调用MySQL函数来计算:二氧化硫(SO2)、二氧化氮(NO2)、一氧化碳(CO)、臭氧(O3)、臭氧8小时滑动(O38)、PM2.5、PM10的24小时平均浓度对应的IAQI和AQI。
空气质量指数计算对照表
计算IAQI函数
DELIMITER $$USE `epdp_lyg`$$DROP FUNCTION IF EXISTS `IAQI_24H`$$CREATE DEFINER=`root`@`%` FUNCTION `IAQI_24H`(param_factor_type VARCHAR(10),param_factor_value DECIMAL(10,5)) RETURNS VARCHAR(32) CHARSET utf8mb4
BEGIN
IF
param_factor_type IS NULL OR LENGTH(REPLACE(param_factor_type,' ',''))=0
OR param_factor_value IS NULL OR param_factor_value IS NULL
THEN
RETURN NULL;
END IF;
#二氧化硫(SO2)
IF
param_factor_type ="二氧化硫" OR LOWER(param_factor_type) ="so2"
THEN IFparam_factor_value BETWEEN 0 AND 50THENRETURN CEILING((50-0)/(50-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 50 AND 150THENRETURN CEILING((100-50)/(150-50)*(param_factor_value-50)+50);ELSEIFparam_factor_value BETWEEN 150 AND 475THENRETURN CEILING((150-100)/(475-150)*(param_factor_value-150)+100);ELSEIFparam_factor_value BETWEEN 475 AND 800THENRETURN CEILING((200-150)/(800-475)*(param_factor_value-475)+150);ELSEIFparam_factor_value BETWEEN 800 AND 1600THENRETURN CEILING((300-200)/(1600-800)*(param_factor_value-800)+200);ELSEIFparam_factor_value BETWEEN 1600 AND 2100THENRETURN CEILING((400-300)/(2100-1600)*(param_factor_value-1600)+300);ELSEIFparam_factor_value BETWEEN 2100 AND 2620THENRETURN CEILING((500-400)/(2620-2100)*(param_factor_value-2100)+400);ELSERETURN NULL; END IF;END IF;#二氧化氮(NO2)
IF
param_factor_type ="二氧化氮" OR LOWER(param_factor_type) ="no2"
THEN IFparam_factor_value BETWEEN 0 AND 40THENRETURN CEILING((50-0)/(40-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 40 AND 80THENRETURN CEILING((100-50)/(80-40)*(param_factor_value-40)+50);ELSEIFparam_factor_value BETWEEN 80 AND 180THENRETURN CEILING((150-100)/(180-80)*(param_factor_value-80)+100);ELSEIFparam_factor_value BETWEEN 180 AND 280THENRETURN CEILING((200-150)/(280-180)*(param_factor_value-180)+150);ELSEIFparam_factor_value BETWEEN 280 AND 565THENRETURN CEILING((300-200)/(565-280)*(param_factor_value-280)+200);ELSEIFparam_factor_value BETWEEN 565 AND 750THENRETURN CEILING((400-300)/(750-565)*(param_factor_value-565)+300);ELSEIFparam_factor_value BETWEEN 750 AND 940THENRETURN CEILING((500-400)/(940-750)*(param_factor_value-750)+400);ELSERETURN NULL; END IF;END IF;#一氧化碳(CO)
IF
param_factor_type ="一氧化碳" OR LOWER(param_factor_type) ="co"
THEN IFparam_factor_value BETWEEN 0 AND 2THENRETURN CEILING((50-0)/(2-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 2 AND 4THENRETURN CEILING((100-50)/(4-2)*(param_factor_value-2)+50);ELSEIFparam_factor_value BETWEEN 4 AND 14THENRETURN CEILING((150-100)/(14-4)*(param_factor_value-4)+100);ELSEIFparam_factor_value BETWEEN 14 AND 24THENRETURN CEILING((200-150)/(24-14)*(param_factor_value-14)+150);ELSEIFparam_factor_value BETWEEN 24 AND 36THENRETURN CEILING((300-200)/(36-24)*(param_factor_value-24)+200);ELSEIFparam_factor_value BETWEEN 36 AND 48THENRETURN CEILING((400-300)/(48-36)*(param_factor_value-36)+300);ELSEIFparam_factor_value BETWEEN 48 AND 60THENRETURN CEILING((500-400)/(60-48)*(param_factor_value-48)+400);ELSERETURN NULL; END IF;END IF;#臭氧8小时滑动(O38)& 臭氧(O3)
IF
LOWER(param_factor_type) ="o38" OR LOWER(param_factor_type) ="o3"
THEN IFparam_factor_value BETWEEN 0 AND 100THENRETURN CEILING((50-0)/(100-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 100 AND 160THENRETURN CEILING((100-50)/(160-100)*(param_factor_value-100)+50);ELSEIFparam_factor_value BETWEEN 160 AND 215THENRETURN CEILING((150-100)/(215-160)*(param_factor_value-160)+100);ELSEIFparam_factor_value BETWEEN 215 AND 265THENRETURN CEILING((200-150)/(265-215)*(param_factor_value-215)+150);ELSEIFparam_factor_value BETWEEN 265 AND 800THENRETURN CEILING((300-200)/(800-265)*(param_factor_value-265)+200);ELSE#臭氧高于800,8小时滑动IAQI按照1小时平均浓度计算的分指数报告。RETURN NULL; END IF;END IF;#PM2.5
IF
LOWER(param_factor_type) ="pm25" OR LOWER(param_factor_type) ="pm2.5"
THEN IFparam_factor_value BETWEEN 0 AND 35THENRETURN CEILING((50-0)/(35-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 35 AND 75THENRETURN CEILING((100-50)/(75-35)*(param_factor_value-35)+50);ELSEIFparam_factor_value BETWEEN 75 AND 115THENRETURN CEILING((150-100)/(115-75)*(param_factor_value-75)+100);ELSEIFparam_factor_value BETWEEN 115 AND 150THENRETURN CEILING((200-150)/(150-115)*(param_factor_value-115)+150);ELSEIFparam_factor_value BETWEEN 150 AND 250THENRETURN CEILING((300-200)/(250-150)*(param_factor_value-150)+200);ELSEIFparam_factor_value BETWEEN 250 AND 350THENRETURN CEILING((400-300)/(350-250)*(param_factor_value-250)+300);ELSEIFparam_factor_value BETWEEN 350 AND 500THENRETURN CEILING((500-400)/(500-350)*(param_factor_value-350)+400);ELSERETURN NULL; END IF;END IF;#PM10
IF
LOWER(param_factor_type) ="pm10"
THEN IFparam_factor_value BETWEEN 0 AND 50THENRETURN CEILING((50-0)/(50-0)*(param_factor_value-0)+0);ELSEIFparam_factor_value BETWEEN 50 AND 150THENRETURN CEILING((100-50)/(150-50)*(param_factor_value-50)+50);ELSEIFparam_factor_value BETWEEN 150 AND 250THENRETURN CEILING((150-100)/(250-150)*(param_factor_value-150)+100);ELSEIFparam_factor_value BETWEEN 250 AND 350THENRETURN CEILING((200-150)/(350-250)*(param_factor_value-250)+150);ELSEIFparam_factor_value BETWEEN 350 AND 420THENRETURN CEILING((300-200)/(420-350)*(param_factor_value-350)+200);ELSEIFparam_factor_value BETWEEN 420 AND 500THENRETURN CEILING((400-300)/(500-420)*(param_factor_value-420)+300);ELSEIFparam_factor_value BETWEEN 500 AND 600THENRETURN CEILING((500-400)/(600-500)*(param_factor_value-500)+400);ELSERETURN NULL; END IF;END IF;END$$DELIMITER ;
调用测试
SELECT
`IAQI_24H`("so2",4.00) so2iaqi,
`IAQI_24H`("no2",30.00) no2iaqi,
`IAQI_24H`("co",0.700) coiaqi,
`IAQI_24H`("o38",119.00) o38iaqi,
`IAQI_24H`("pm25",21.00) pm25iaqi,
`IAQI_24H`("pm10",38.00) pm10iaqi
计算AQI函数
DELIMITER $$USE `数据库名称`$$DROP FUNCTION IF EXISTS `AQI_24H`$$CREATE DEFINER=`数据库登录账号`@`%` FUNCTION `AQI_24H`(
param_so2_value DECIMAL(10,5),
param_no2_value DECIMAL(10,5),
param_co_value DECIMAL(10,5),
param_o38_value DECIMAL(10,5),
param_pm25_value DECIMAL(10,5),
param_pm10_value DECIMAL(10,5)) RETURNS VARCHAR(32) CHARSET utf8mb4
BEGIN
DECLARE so2_iaqi DECIMAL(10,5);
DECLARE no2_iaqi DECIMAL(10,5);
DECLARE co_iaqi DECIMAL(10,5);
DECLARE o38_iaqi DECIMAL(10,5);
DECLARE pm25_iaqi DECIMAL(10,5);
DECLARE pm10_iaqi DECIMAL(10,5);
DECLARE aqi INT(5);#二氧化硫(SO2)IFparam_so2_value BETWEEN 0 AND 50THENSET so2_iaqi = CEILING((50-0)/(50-0)*(param_so2_value-0)+0) ;ELSEIFparam_so2_value BETWEEN 50 AND 150THENSET so2_iaqi = CEILING((100-50)/(150-50)*(param_so2_value-50)+50);ELSEIFparam_so2_value BETWEEN 150 AND 475THENSET so2_iaqi = CEILING((150-100)/(475-150)*(param_so2_value-150)+100);ELSEIFparam_so2_value BETWEEN 475 AND 800THENSET so2_iaqi = CEILING((200-150)/(800-475)*(param_so2_value-475)+150);ELSEIFparam_so2_value BETWEEN 800 AND 1600THENSET so2_iaqi = CEILING((300-200)/(1600-800)*(param_so2_value-800)+200);ELSEIFparam_so2_value BETWEEN 1600 AND 2100THENSET so2_iaqi = CEILING((400-300)/(2100-1600)*(param_so2_value-1600)+300);ELSEIFparam_so2_value BETWEEN 2100 AND 2620THENSET so2_iaqi = CEILING((500-400)/(2620-2100)*(param_so2_value-2100)+400);ELSESET so2_iaqi = NULL; END IF;#二氧化氮(NO2)IFparam_no2_value BETWEEN 0 AND 40THENSET no2_iaqi = CEILING((50-0)/(40-0)*(param_no2_value-0)+0);ELSEIFparam_no2_value BETWEEN 40 AND 80THENSET no2_iaqi = CEILING((100-50)/(80-40)*(param_no2_value-40)+50);ELSEIFparam_no2_value BETWEEN 80 AND 180THENSET no2_iaqi = CEILING((150-100)/(180-80)*(param_no2_value-80)+100);ELSEIFparam_no2_value BETWEEN 180 AND 280THENSET no2_iaqi = CEILING((200-150)/(280-180)*(param_no2_value-180)+150);ELSEIFparam_no2_value BETWEEN 280 AND 565THENSET no2_iaqi = CEILING((300-200)/(565-280)*(param_no2_value-280)+200);ELSEIFparam_no2_value BETWEEN 565 AND 750THENSET no2_iaqi = CEILING((400-300)/(750-565)*(param_no2_value-565)+300);ELSEIFparam_no2_value BETWEEN 750 AND 940THENSET no2_iaqi = CEILING((500-400)/(940-750)*(param_no2_value-750)+400);ELSESET no2_iaqi = NULL; END IF;#一氧化碳(CO)IFparam_co_value BETWEEN 0 AND 2THENSET co_iaqi = CEILING((50-0)/(2-0)*(param_co_value-0)+0);ELSEIFparam_co_value BETWEEN 2 AND 4THENSET co_iaqi = CEILING((100-50)/(4-2)*(param_co_value-2)+50);ELSEIFparam_co_value BETWEEN 4 AND 14THENSET co_iaqi = CEILING((150-100)/(14-4)*(param_co_value-4)+100);ELSEIFparam_co_value BETWEEN 14 AND 24THENSET co_iaqi = CEILING((200-150)/(24-14)*(param_co_value-14)+150);ELSEIFparam_co_value BETWEEN 24 AND 36THENSET co_iaqi = CEILING((300-200)/(36-24)*(param_co_value-24)+200);ELSEIFparam_co_value BETWEEN 36 AND 48THENSET co_iaqi = CEILING((400-300)/(48-36)*(param_co_value-36)+300);ELSEIFparam_co_value BETWEEN 48 AND 60THENSET co_iaqi = CEILING((500-400)/(60-48)*(param_co_value-48)+400);ELSESET co_iaqi = NULL; END IF;
#臭氧8小时滑动(O38)IFparam_o38_value BETWEEN 0 AND 100THENSET o38_iaqi = CEILING((50-0)/(100-0)*(param_o38_value-0)+0);ELSEIFparam_o38_value BETWEEN 100 AND 160THENSET o38_iaqi = CEILING((100-50)/(160-100)*(param_o38_value-100)+50);ELSEIFparam_o38_value BETWEEN 160 AND 215THENSET o38_iaqi = CEILING((150-100)/(215-160)*(param_o38_value-160)+100);ELSEIFparam_o38_value BETWEEN 215 AND 265THENSET o38_iaqi = CEILING((200-150)/(265-215)*(param_o38_value-215)+150);ELSEIFparam_o38_value BETWEEN 265 AND 800THENSET o38_iaqi = CEILING((300-200)/(800-265)*(param_o38_value-265)+200);ELSE#臭氧高于800,8小时滑动IAQI按照1小时平均浓度计算的分指数报告。SET o38_iaqi = NULL; END IF;#PM2.5IFparam_pm25_value BETWEEN 0 AND 35THENSET pm25_iaqi = CEILING((50-0)/(35-0)*(param_pm25_value-0)+0);ELSEIFparam_pm25_value BETWEEN 35 AND 75THENSET pm25_iaqi = CEILING((100-50)/(75-35)*(param_pm25_value-35)+50);ELSEIFparam_pm25_value BETWEEN 75 AND 115THENSET pm25_iaqi = CEILING((150-100)/(115-75)*(param_pm25_value-75)+100);ELSEIFparam_pm25_value BETWEEN 115 AND 150THENSET pm25_iaqi = CEILING((200-150)/(150-115)*(param_pm25_value-115)+150);ELSEIFparam_pm25_value BETWEEN 150 AND 250THENSET pm25_iaqi = CEILING((300-200)/(250-150)*(param_pm25_value-150)+200);ELSEIFparam_pm25_value BETWEEN 250 AND 350THENSET pm25_iaqi = CEILING((400-300)/(350-250)*(param_pm25_value-250)+300);ELSEIFparam_pm25_value BETWEEN 350 AND 500THENSET pm25_iaqi = CEILING((500-400)/(500-350)*(param_pm25_value-350)+400);ELSESET pm25_iaqi = NULL; END IF;#PM10IFparam_pm10_value BETWEEN 0 AND 50THENSET pm10_iaqi = CEILING((50-0)/(50-0)*(param_pm10_value-0)+0);ELSEIFparam_pm10_value BETWEEN 50 AND 150THENSET pm10_iaqi = CEILING((100-50)/(150-50)*(param_pm10_value-50)+50);ELSEIFparam_pm10_value BETWEEN 150 AND 250THENSET pm10_iaqi = CEILING((150-100)/(250-150)*(param_pm10_value-150)+100);ELSEIFparam_pm10_value BETWEEN 250 AND 350THENSET pm10_iaqi = CEILING((200-150)/(350-250)*(param_pm10_value-250)+150);ELSEIFparam_pm10_value BETWEEN 350 AND 420THENSET pm10_iaqi = CEILING((300-200)/(420-350)*(param_pm10_value-350)+200);ELSEIFparam_pm10_value BETWEEN 420 AND 500THENSET pm10_iaqi = CEILING((400-300)/(500-420)*(param_pm10_value-420)+300);ELSEIFparam_pm10_value BETWEEN 500 AND 600THENSET pm10_iaqi = CEILING((500-400)/(600-500)*(param_pm10_value-500)+400);ELSESET pm10_iaqi = NULL; END IF;SELECT MAX(iaqi) INTO aqi FROM(
SELECT so2_iaqi iaqi
UNION ALL
SELECT no2_iaqi
UNION ALL
SELECT co_iaqi
UNION ALL
SELECT o38_iaqi
UNION ALL
SELECT pm25_iaqi
UNION ALL
SELECT pm10_iaqi
)a;
RETURN aqi;END$$DELIMITER ;
调用测试
#参数顺序:so2,no2,co,o38,pm25,pm10
SELECT AQI_24H(4.00,30.00,0.700,119.00,21.00,38.00) aqi
MySQL函数计算24小时平均浓度对应的IAQI和AQI相关推荐
- 计算机公式求时间差公式,24时间差计算公式 excel中计算24小时
excel中计算24小时制时间差 怎样在excel中计算24小时制时间差,在一天之内的小编会,不过不在一天之内外套一个MOD函数,就行了,这样试试 =MOD("0:36"-&quo ...
- mysql 查询最近24小时,mysql中怎么查询最近24小时、昨天、最近7天、下周、最近30天、下月的数据...
mysql中如何查询最近24小时.昨天.最近7天.上周.最近30天.上月的数据 在数据表中使用date列保存yyyy.MM.dd HH:MM:SS格式的时间记录,mysql中如何查询最近24小时.昨天 ...
- Mysql 查询前24小时、3条离当前时间最近的记录
Mysql 查询以当前时间往后的24小时内的数据 register_date >=(NOW() - interval 24 hour) 例如: select * from sys_user W ...
- java计算24小时之内_java的系统时间,怎么计算从现在到凌晨还剩下多少时间?
Apache commons-lang3 long milliSecondsLeftToday = 86400000 -DateUtils.getFragmentInMilliseconds(Cale ...
- mysql geo_地理位置geo处理之mysql函数
目前越来越多的业务都会基于LBS,附近的人,外卖位置,附近商家等等,现就讨论离我最近这一业务场景的解决方案. 原文:https://www.jianshu.com/p/455d0468f6d4 目前已 ...
- mysql geo_地理位置geo处理之mysql函数的详细介绍(附代码)
本篇文章给大家带来的内容是关于地理位置geo处理之mysql函数的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前越来越多的业务都会基于LBS,附近的人,外卖位 ...
- python根据excel时间表统计24小时各小时区间点的个数
1.首先使用excel中的HOUR()函数,将日期数据(年/月/日 时:分:秒)转换为小时,表格命名为hour.xlsx: 2.使用python读取excel数据hour.xlsx,将小时列转换为列表 ...
- mysql geo 函数_地理位置geo处理之mysql函数
目前越来越多的业务都会基于LBS,附近的人,外卖位置,附近商家等等,现就讨论离我最近这一业务场景的解决方案. 原文:https://www.jianshu.com/p/455d0468f6d4 目前已 ...
- mysql geo 函数_【后端开发】地理位置geo处理之mysql函数的详细介绍(附代码)
本篇文章给大家带来的内容是关于地理位置geo处理之mysql函数的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前越来越多的业务都会基于LBS,附近的人,外卖位 ...
最新文章
- 独家 | 你的神经网络不起作用的37个理由(附链接)
- 应届生web前端面试题_2020最新Web前端经典面试题试题及答案(持续更新)
- python无穷大整数_python的特殊数字类型(无穷大、无穷小等)
- 2020 蓝桥杯大学 B 组省赛模拟赛(一) C. 结果填空:七巧板
- 创建面板对象Java,从PNG图像或Java面板创建PDF
- 漫画:什么是计数排序
- 可以让你少奋斗十年的工作经验
- Docker安装FireBird数据库
- 当科学家们使用计算机来试图,当科学家们使用计算机来试图预测复杂的--易哈佛考试题库...
- pycharm 服务器证书错误,pycharm 如何跳出服务器证书不受信任的提示
- DolphinPHP(海豚PHP)实战教程
- Python专栏 | ICA应用:如何识别伪影信号?(一)
- SEO网站内容优化的6点干货分享分享-飞鱼SEO
- 【Oracle】ngrok 映射数据库地址为外网
- 吉林大学软件学院黄庆道《最优化算法》对偶单纯形使用大M法条件
- UVALive 6657 GCD XOR
- windwos服务器网站504,打开网站出现504 gateway time-out的原因及解决方法
- 精彩回顾 | Dev.Together 2022 开发者生态峰会圆满落幕
- 运行无法打开计算机策略,“组策略不能打开”的解决方案
- PNP与NPN两种三极管使用方法
热门文章
- 利用python实现m4a格式到MP3的转换
- C#工作总结(一):Fleck的WebSocket使用
- 微信html5开发常见bug,微信公众号H5之微信分享常见错误和问题
- java毕业生设计宠物医院管理计算机源码+系统+mysql+调试部署+lw
- SQL语句中计算百分比
- cad2012打开后闪退_2012cad闪退怎么解决win10_cad2012闪退win10系统如何修复
- java数组实现 多个数字求最大公约数
- 练习三 HTML5 logo
- Linux下的LVM逻辑卷管理
- Win10怎么关闭屏幕保护?Windows10禁用屏保步骤