在Oracle SQL中查找小于平均值的值

时间:2015-09-07 12:54:47

标签: sql oracle average

我有这段代码:

SELECT username, first_name, last_name, NVL(salary,0) "salary"
FROM customer
WHERE NVL(salary,0) < AVG(NVL(salary, 0));

试图找出哪些用户的工资低于平均水平而一个用户没有工资(&#34; null&#34;我必须将其转换为0)。

最后一句话&#34; avg(nvl(薪水,0))&#34;没有工作,我不能为我的生活找出原因。如果我用平均值的实际数字替换语句,一切正常。

3 个答案:

答案 0 :(得分:4)

以下是使用分析函数的方法:

select username,
       first_name,
       last_name,
       salary
from   (select username,
               first_name,
               last_name,
               nvl(salary,0) salary,
               avg(nvl(salary,0)) over () avg_all_salaries
        from   customer)
where  salary < avg_all_salaries

它可以很容易地显示所有工资的平均值,如果有的话。

答案 1 :(得分:2)

您可以尝试预先选择平均值:

select username,first_name,last_name,nvl(salary,0) "salary"
from customer
where nvl(salary,0) < (select avg(nvl(salary,0)) from customer);

您只能在avgselect条款中使用having,这就是您出错的原因。

也不要使用nvl,而是使用coalesce代替,这对大数据来说应该更快。

答案 2 :(得分:0)

 parentItem.Add("Child Item", templateItem);

这很容易获得。