首页 > 解决方案 > 如何查询该列的任何行中都不存在特定数字的列

问题描述

我有分别ID | Name | Salary的类型Integer | String | Integer

我需要查询 Salary 列的所有行的 avg,然后再次查询 Salary 列的所有行的 avg,但是如果其中任何行包含 0,则从这些数字中删除 0,并计算 avg。

因此,如果 Salary 返回1420, 2006, 500,则下一个查询应该返回142, 26, 5。然后我计算不包含 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

标签: sqlstringaverageaggregate-functions

解决方案


你只想要条件聚合吗?

select avg(salary), avg(case when salary <> 0 then salary end)
from t;

还是你想要分裂?

select id, name, floor(salary / 10)
from t;

这会产生您指定的结果,但它与“平均”无关。


推荐阅读