programing

최대 평균을 찾는 방법

magicmemo 2023. 7. 10. 22:15
반응형

최대 평균을 찾는 방법

최대 평균 급여를 표시하려고 하는데, 효과가 없을 것 같습니다.

다음과 같이 표시할 평균 급여 목록을 얻을 수:

select worker_id, avg(salary)
from workers
group by worker_id;

그러나 최대 평균 급여 목록을 다음과 같이 표시하려고 할 때:

select max (avg(salary))
from (select worker_id, avg(salary)
      from workers
      group by worker_id);

작동하지 않습니다.잘못된 식별자 오류가 발생합니다.각 근로자의 평균 급여를 사용하여 각 근로자의 최대 평균을 구하려면 어떻게 해야 합니까?

감사해요.

집계 함수(예: avg)에서 생성된 열은 일반적으로 임의 이름을 가집니다.별칭을 사용하여 다음 항목을 선택합니다.

select max(avg_salary)
from (select worker_id, avg(salary) AS avg_salary
      from workers
      group by worker_id) As maxSalary;
select worker_id, avgsal 
from 
(
  select worker_id, avg(salary) as avgsal 
  from workers 
  group by worker_id
) 
where avgsal=(select  max(avgsal) 
              from (select worker_id, avg(salary) as avgsal 
                    from workers group by worker_id))

작업자 ID와 함께 가장 높은 평균이 표시됩니다.

여기에 설명된 대로 사용할 수 있습니다.

SELECT worker_id, AVG(salary)
FROM workers
GROUP BY worker_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary)) FROM workers GROUP BY worker_id) 
select worker_id, avg(salary)
from workers
group by worker_id
having avg(salary) = (select max(avgsal) from 
(select worker_id, avg(salary) as avgsal 
from workers 
group by worker_id));

이것도 효과가 있을 것 같습니다.

다음과 같이 하위 쿼리 내의 열에 열 별칭을 추가하여 쿼리를 수정할 수 있습니다.

select max(avg_salary)
from (select worker_id, avg(salary) avg_salary
      from workers
      group by worker_id);

하지만, 만약에worker_id작업자 테이블의 레코드를 고유하게 식별합니다. 이는 기능적으로 다음과 같습니다(간소화할 수 있음).

select max(salary) from workers;

WITH 조항을 사용하면 다음과 같이 수행할 수 있습니다.

with averagesal as (
select dept_id d_id, avg(sal) avgsal from emp_details group by dept_id)
select * from averagesal where avgsal = (select max(avgsal) from averagesal);
select max(a.high)Avg_highest_salary,
       e.dept 
from  (
    select avg(salary) high,dept from emp group by dept) a,
    emp e 
where  a.dept = e.dept
group by   e.dept
order by   max(a.high) desc

그것은 높은 평균 최고 연봉을 뎁트와 함께 먼저 보여줄 것입니다.

부서와 함께 급여를 표시하고 싶지 않으면 이것을 사용할 수 있습니다.

select max(avg(salary)) max_avg_salary
from emp
group by dept;
select Dep_name
from 
(
  select Dep_name , avg(Salary) as avgsal 
  from salary
  group by Dep_name
) sal1
where avgsal=(select  max(avgsal) 
              from (select Dep_name , avg(salary) as avgsal 
                    from salary group by Dep_name) sal2)

다음과 같은 방법을 시도해야 합니다.

select avg(salary) as max_avg_salary from Salaries group by emp_no order by avg(salary) desc limit 1;

https://stackoverflow.com/a/8050885/12190487 에 다음 오류가 표시됩니다.

ER_DERIVED_MUST_HAVE_ALIAS: Every derived table must have its own alias

선택할 새 양식 열에 별칭 사용

select max(avg_salary)
from (select worker_id, avg(salary) AS avg_salary
      from workers
      group by worker_id) as avg ; 

저는 잘 해결됐어요.

from (select avg(salary) AS avg_salary
       from employees
      group by Name) AS T;

이러한 방식으로 첫 번째 행을 평균 찾기를 기준으로 내림차순으로 정렬할 수 있습니다.

select top 1  worker_id, avg(salary) as avgsalary 
      from workers
      group by worker_id 
      order by avgsalary desc
select * from (select avg(sal) over (partition by deptno ) avrg,deptno from emp
order by avrg desc) where rownum<2;

위의 것을 시도해 보세요.

다음은 이전 답변에서 영감을 얻은 worker_id를 가져오는 방법입니다.

SELECT worker_id, MAX(avg_salary)
FROM (SELECT worker_id, AVG(salary) AS avg_salary
      FROM workers
      GROUP BY worker_id);

이 작업은 단일 작업으로도 수행할 수 있습니다.select문(둘 다 포함)max그리고.avg) 이렇게

select max(avg(salary)) max_avg_salary
from workers
group by worker_id;

언급URL : https://stackoverflow.com/questions/8050854/how-to-find-maximum-avg

반응형