mysql - 防止选择平均值出现 NULL
问题描述
我试图弄清楚如何防止从 a 返回 NULLselect
并且不为该查询返回任何内容(0 行),其中我提供了不正确state
的值作为
select avg(lat) as lat, avg(lon) as lon from locations where city = "New York" and state = "NC"
我尝试过类似的东西
select case when avg(lat) != NULL then avg(lat) end as lat, case when avg(lon) != NULL then avg(lon) end as lon from locations where city ="New York" and state="NC"
但这也没有用。
解决方案
聚合函数并不group by
总是返回一行。因此,您需要添加一些group by
(例如group by city
)或having avg(lat) is not null
防止在空输入数据集上输出(已过滤)。
create table t as select * from (values row(1, 'NY'), row(3, 'NY'), row(null, 'LA') ) as t(lat, state)
select state, avg(lat) as alat from t group by state
状态 | 阿拉特 :---- | -----: 纽约 | 2.0000 洛杉矶 | 空值
/*No input rows - empty*/ select avg(lat) from t where state = 'AR' group by state
| 平均(纬度)| | --------: |
/*There's input row, but the avg is empty - empty output*/ select avg(lat) from t where state = 'LA' group by state
| 平均(纬度)| | --------: | | 空|
/*There's a row and avg is empty, but we filter it out with having*/ select avg(lat) from t where state = 'LA' group by state having avg(lat) is not null
| 平均(纬度)| | --------: |
db<>在这里摆弄
推荐阅读
- c# - 如何将 DateTime 格式化为 yyyy-MM-dd kk:mm:ss(01-24 小时)?
- sql - 根据当前时间点的部门对员工历史记录表进行不同计数
- javascript - 循环结果由空格分隔
- java - 如何使用 java 添加自动增量值?
- python - 库存系统添加新对象而不是数量增加 1
- spring - 如何防止调用 ApplicationListener
在使用 oauth2 在 Spring Security 中的每次 api 调用之后? - javascript - 防止输入边距在缩放时增长
- sockets - 烧瓶套接字(服务器端)未与客户端(Javascript)连接
- javascript - 在 Python-Flask 应用程序上执行多个 AJAX 请求时出现 Chrome 浏览器错误
- swift - 更新到 Kotlin 1.4.10 后 KotlinPair 出现问题