-2

従業員数と平均給与を取得できますが、平均を下回る従業員数をリストする追加選択を取得しようとすると失敗します。

select count(employee_id),avg(salary) 
from employees
Where salary < avg(salary);
4

6 に答える 6

3

問題は、それAVGが集計関数であることです。SQL は、集計された結果を行内で混合する方法を理解できるほど賢くありません。従来の方法は、結合を使用することです。

select count(*), avg(e.salary),
        sum(case when e.salary < const.AvgSalary then 1 else 0 end) as NumBelowAverage
from employees e cross join
     (select avg(salary) as AvgSalary from employees) as const
于 2012-12-10T20:41:34.500 に答える
3
select count(*), (select avg(salary) from employees)
from employees 
where salary < (select avg(salary) from employees);
于 2012-12-10T20:35:20.917 に答える
1
   select TotalNumberOfEmployees,
          AverageSalary,
          count(e.employee_id) NumberOfEmployeesBelowAverageSalary
     from (
            select count(employee_id) TotalNumberOfEmployees,
                   avg(salary) AverageSalary
              from employees
          ) preagg
left join employees e on e.salary < preagg.AverageSalary
 group by TotalNumberOfEmployees,
          AverageSalary

注: LEFT 結合を使用したため、3 人の同等の従業員がいる場合、結果が表示されない (平均以下の従業員はいない) 代わりに 0 が表示されます。

于 2012-12-10T20:38:02.853 に答える
0
select * from <table name> where salary < (select avg(<salary column name) from <table name>);

例:

select * from EMPLOYEE where sal < (select avg(emp_sal) from EMPLOYEE);
于 2015-11-19T15:09:25.473 に答える
0
SELECT e.ename,e.deptno,e.sal,d.avg
FROM emp e,(SELECT deptno, avg(sal) avg
             FROM emp
             GROUP BY deptno) d
 WHERE e.deptno=d.deptno
 AND
 e.sal < d.avg
于 2018-01-25T18:53:12.243 に答える