문제 데이터 세팅
SET SESSION sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
SET sql_mode = (SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));
DROP DATABASE IF EXISTS a6;
CREATE DATABASE a6;
USE a6;
CREATE TABLE dept (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL UNIQUE
);
INSERT INTO dept
SET regDate = NOW(),
`name` = '홍보';
INSERT INTO dept
SET regDate = NOW(),
`name` = '기획';
CREATE TABLE emp (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
regDate DATETIME NOT NULL,
`name` CHAR(100) NOT NULL,
deptId INT UNSIGNED NOT NULL,
salary INT UNSIGNED NOT NULL
);
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길동',
deptId = 1,
salary = 5000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '홍길순',
deptId = 1,
salary = 6000;
INSERT INTO emp
SET regDate = NOW(),
`name` = '임꺽정',
deptId = 2,
salary = 4000;
문제 정답
SELECT E.deptId AS id,
MAX(E.salary) AS maxSalary
FROM emp AS E
GROUP BY E.deptId
SELECT E.id,
E.name,
E.salary,
D.id AS deptId,
D.maxSalary
FROM emp AS E
INNER JOIN (
SELECT E.deptId AS id,
MAX(E.salary) AS maxSalary
FROM emp AS E
GROUP BY E.deptId
) AS D
ON E.deptId = D.id;
SELECT E.id,
E.name,
E.salary,
D.id AS deptId,
D.maxSalary
FROM emp AS E
INNER JOIN (
SELECT E.deptId AS id,
MAX(E.salary) AS maxSalary
FROM emp AS E
GROUP BY E.deptId
) AS D
ON E.deptId = D.id
AND E.salary = D.maxSalary;
SELECT D2.name AS `부서명`,
E.name AS `사원명`,
DATE(E.regDate) AS `입사일`,
CONCAT(FORMAT(E.salary, 0), '만원') AS `연봉`
FROM emp AS E
INNER JOIN (
SELECT E.deptId AS id,
MAX(E.salary) AS maxSalary
FROM emp AS E
GROUP BY E.deptId
) AS D
ON E.deptId = D.id
AND E.salary = D.maxSalary
INNER JOIN dept AS D2
ON E.deptId = D2.id;