본문 바로가기
MySql

MySQL SQL select query using joins, group by and aggregate functions

by 베이스 공부 2020. 12. 15.
반응형

다음 필드가있는 두 개의 테이블이 있습니다.

emp_table: emp_id, emp_name
salary_increase: emp_id, inc_date, inc_amount

직원 세부 정보, 직원이 급여 인상을받은 횟수, 최대 인상 금액의 값 및 인상 날짜를 제공하는 쿼리를 작성해야합니다. 지금까지 내가 가진 것은 다음과 같습니다.

SELECT e.*, count(i.inc_amount), max(i.inc_amount)
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
GROUP BY e.emp_id;

이는 최대 인상이 부여 된 날짜를 제외한 모든 요구 사항을 정확하게 제공합니다. 나는 성공하지 못한 채 다음을 시도했습니다.

SELECT e.*, count(i.inc_amount), max(inc_amount), t.inc_date
FROM salary_increase AS i
RIGHT JOIN emp_table AS e
ON i.emp_id=e.emp_id
RIGHT JOIN
    (
    SELECT emp_id, inc_date FROM salary_increase
    WHERE inc_amount=max(inc_amount) GROUP BY emp_id
    ) AS t
ON e.emp_id=t.emp_id
GROUP BY e.emp_id;

이것은 '그룹 기능의 잘못된 사용'오류를 제공합니다. 내가 뭘 잘못하고 있는지 아는 사람 있나요?

 

해결 방법

 

where 절에서 WHERE inc_amount = max (inc_amount) 를 수행 할 수 없습니다. HAVING 을 사용하거나 조인 조건에서 수행하십시오. 대신 다음을 시도하십시오.

SELECT 
  e.emp_id, 
  e.inc_date,
  t.TotalInc, 
  t.MaxIncAmount
FROM salary_increase AS i
INNER JOIN emp_table AS e ON i.emp_id=e.emp_id
INNER JOIN
(
   SELECT 
     emp_id,
     MAX(inc_amount)     AS MaxIncAmount, 
     COUNT(i.inc_amount) AS TotalInc
   FROM salary_increase
   GROUP BY emp_id
) AS t ON e.emp_id = t.emp_id AND e.inc_amount = t.MaxIncAmount;

 

참조 페이지 https://stackoverflow.com/questions/20594953

 

 

반응형

댓글