Lv4. ๊ฐ์ฅ ๋์ ์๊ธ์ ๋ฐ๋ ์ง์์?
๋ด๊ฐ ํ๋ฆฐ/๋์น ๋ถ๋ถ์ ๋ฏผํธ์์ผ๋ก ํ์!
1.
๊ฐ ์ง์์ ์ด๋ฆ, ๋ถ์, ์๊ธ, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ง์์ด ์ํ ๋ถ์์์ ๊ฐ์ฅ ๋์ ์๊ธ์ ๋ฐ๊ณ ์๋ ์ง์์ ์ด๋ฆ๊ณผ ์๊ธ์ ์กฐํํ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋์ ๋ต |
select e2.Name,
e2.Department, e2.Salary, sub.Top_Earner, sub.Top_Salary from Employees e2 JOIN ( select e.Department, e.Name Top_Earner, a.Top_salary from Employees e join (select Department, max(Salary) Top_salary from Employees group by Department ) a on e.Department=a.Department where e.salary=a.Top_salary ) sub on e2.Department=sub.Department order by |
์ ๋ต |
SELECT
e1.Name, e1.Department, e1.Salary, e2.Name AS Top_Earner, e2.Salary AS Top_Salary FROM Employees e1 JOIN Employees e2 ON e1.Department = e2.Department WHERE e2.Salary = ( SELECT MAX(Salary) FROM Employees e3 WHERE e3.Department = e1.Department ); |
์ค๋ต ๋ ธํธ | ๋์ ๋ต์ Top_earner์ Top_salary๋ฅผ ๋ํ๋ด๋ ํ ์ด๋ธ์ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ ์ฌ์ฉํด์ ๋ง๋ค์๋๋ฐ, Where e3.Department=e1.Department ์ ์ ์ฌ์ฉํ๋ฉด ๊ทธ ๊ณผ์ ์ ๊ฐ๋จํ๊ฒ ํํํ ์ ์๋ค. |
๊ณ ๋ฏผํ ์ | 1. ํ
์ด๋ธ์ด ํ๊ฐ์ธ๋ฐ ์ JOIN์ ์ฌ์ฉํ๋๊ฐ? ใ=> ๋ถ์๋ณ ๊ฐ์ฅ ๋์ ์๊ธ์ ์ฐพ๋ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ํ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ใใ Top earner์ Top salary๋ฅผ ์ถ์ถํ ํ ์ด๋ธ์ ๋ง๋ค๊ณ , ๊ทธ๊ฑธ employees์ ์ฐ๊ฒฐํ๋ฉด ๋ถ์์ ๋ฐ๋ฅธ ใใ ์ต๊ณ ์๋ น์๊ฐ ํ์๋๋ค. 2. Selet ์ ์์ department, max(salary)๋ฅผ ์ ๋ ฅํ๋ฉด Top_salary๊ฐ ๋์๋๋ฐ, Top_Earner๊น์ง ์ฐพ๊ธฐ์ํด ใ Selet ์ ์ department, name, max(salary)๋ฅผ ์์ฑํ๋ฉด ์ค๋ฅ๊ฐ ๋ํ๋๋ค. ์ด์ ๋? ใ=>๋ถ์๋ณ ์ต๊ณ ์๊ธ๊ณผ ๊ทธ ์๋ น์๋ฅผ ์ฐพ๊ธฐ ์ํด gruop by๋ฅผ ์ฌ์ฉํ๋๋ฐ group by๋ฅผ ์ฌ์ฉํ๋ฉด select ์ ์ ํฌํจ๋ ์ปฌ๋ผ๋ค์ ์ง๊ณํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. name์ group by ์ ์ ํฌํจ๋์ด ์์ง๋ ์๊ณ , ์ง๊ณํจ์๋ ์๊ธฐ ๋๋ฌธ์ name์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ์ง ๊ธฐ์ค์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. |
2.
๋ถ์๋ณ๋ก ํ๊ท ์๊ธ์ด ๊ฐ์ฅ ๋์ ๋ถ์์ ์ด๋ฆ๊ณผ ํด๋น ๋ถ์์ ํ๊ท ์๊ธ์ ์กฐํํ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ฃผ์ธ์.
๋์ ๋ต |
select Department,
avg(Salary) Avg_Salary from Employees group by 1 having avg_salary=(select max(avg_sal) from (select avg(Salary) avg_sal from employees group by Department ) a ) |
์ ๋ต |
SELECT
Department, AVG(Salary) AS Avg_Salary FROM Employees GROUP BY Department HAVING AVG(Salary) = ( SELECT MAX(Avg_Salary) FROM (SELECT AVG(Salary) AS Avg_Salary FROM Employees GROUP BY Department) AS subquery ); |
์ค๋ต ๋ ธํธ | ํท๊ฐ๋ฆฐ๋ค.. |
๊ณ ๋ฏผํ ์ | max(avg(salary))๋ ์ค์ฒฉ๋ ์ง๊ณ ํจ์์ด๋ฉฐ, ์ฌ์ฉ๋ถ๊ฐํ๋ค. avg(salary)๋ฅผ ์๋ธ์ฟผ๋ฆฌ์์ ๊ทธ๋ฃนํ๋ฅผ ํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ(Avg_Salary)์ ๋ํด max()๋ฅผ ์ฌ์ฉํด์ผํ๋ค. |
'๋ด์ผ๋ฐฐ์์บ ํ > ์ฌ์ ์บ ํ ๊ณผ์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฌ๋ฆฌ๊ธฐ๋ฐ] SQL ๋ฌธ๋ฒ ์ฐ์ต 7 (0) | 2025.01.25 |
---|---|
[๋ฌ๋ฆฌ๊ธฐ๋ฐ] SQL ๋ฌธ๋ฒ ์ฐ์ต 6 (0) | 2025.01.24 |
[๋ฌ๋ฆฌ๊ธฐ๋ฐ] SQL ๋ฌธ๋ฒ ์ฐ์ต 4 (0) | 2025.01.23 |
[๋ฌ๋ฆฌ๊ธฐ๋ฐ] SQL ๋ฌธ๋ฒ ์ฐ์ต 3 (0) | 2025.01.23 |
[๋ฌ๋ฆฌ๊ธฐ๋ฐ] SQL ๋ฌธ๋ฒ ์ฐ์ต 2 (0) | 2025.01.23 |