sql - 如何查询该列的任何行中都不存在特定数字的列
问题描述
我有分别ID | Name | Salary
的类型Integer | String | Integer
。
我需要查询 Salary 列的所有行的 avg,然后再次查询 Salary 列的所有行的 avg,但是如果其中任何行包含 0,则从这些数字中删除 0,并计算 avg。
因此,如果 Salary 返回1420, 2006, 500
,则下一个查询应该返回142, 26, 5
。然后我计算不包含 0 的后续数字的平均值。
我尝试用谷歌搜索我的具体问题,但没有找到任何接近解决方案的东西。我不是在寻找答案,而是在正确的方向上推动。
我的想法
- 也许我需要将
integer
数据类型转换为varchar
或字符串,然后从那里删除“0”数字,然后再转换回来? - 也许我需要从第一个表结果创建一个临时表,然后插入它们,只是没有 0?
有任何想法吗?希望我很清楚。谢谢!
示例表数据:
ID | Name | Salary
---+----------+-------
1 | Kathleen | 1420
2 | Bobby | 690
3 | Cat | 500
现在我需要查询上表,但从工资行中删除了 0
ID | Name | Salary
---+----------+-------
1 | Kathleen | 142
2 | Bobby | 69
3 | Cat | 5
解决方案
你只想要条件聚合吗?
select avg(salary), avg(case when salary <> 0 then salary end)
from t;
还是你想要分裂?
select id, name, floor(salary / 10)
from t;
这会产生您指定的结果,但它与“平均”无关。
推荐阅读
- r - 不同组的平均值
- python - 如何在 python pandas 中以日期格式从 csv 读取数据
- reactjs - 为反应 JS 指定 BUILD 端口
- python - 使用 Python Selenium Webdriver 未完全加载动态 Web 表单
- mongodb - 如何使用 golang-migrate lib 填充数据
- c# - 在构造可能包含其他类对象列表的类对象时使用依赖注入
- java - 无法将 Spring Boot 与 MySQL 连接
- c# - Masstransit Consumer Unit Test 有时有空消息,使用 rabbit Mq 后端它可以工作
- reactjs - 我需要执行一个函数,在使用 setState 钩子后立即更新状态,但函数内部的状态为空?
- javascript - 当用户在 Blazor Webassembly 身份验证和授权中具有多个角色时出现问题?