SUBQUERY(서브쿼리)
대표적으로는 SELECT, FROM, WHERE절에서 사용 가능
이번 포스팅에서는 FROM, WHERE에 대한 서브쿼리를 소개할 예정입니다.
incident_id | week | date | type | ... |
3001 | 2 | 2020-01-05 | A | |
3002 | 2 | 2020-01-05 | A | |
3003 | 2 | 2020-01-06 | B | |
3004 | 2 | 2020-01-07 | B | |
3005 | 2 | 2020-01-07 | ... | |
3006 | 2 | 2020-01-07 | ... |
table <crimes>
FROM절 서브쿼리
FROM절 서브쿼리 작성 예시) 가상의 테이블을 만든다고 생각
SELECT daily_stats.week
,AVG(daily_stats.incidents_daily)
FROM (
SELECT week
,date
,COUNT(incident_id) AS incidents_daily
FROM crimes
GROUP BY week, date
) daily_stats
GROUP BY daily_stats.week
AVG() 사용할 때, NULL 카운트가 안 되는 점을 고려해서 SQL문을 작성해야 함
WHERE절 서브쿼리
서브쿼리의 결과가 딱 하나일 경우 (주로 MIN, MAX 사용)
SELECT *
FROM crimes
WHERE date = (SELECT MIN(date) FROM crimes)
서브쿼리의 결과가 여러 개인 경우
SELECT *
FROM crimes
WHERE date IN (SELECT DISTINCT date
FROM crimes
ORDER BY date DESC
LIMIT 5
)
HACKER RANK
Top Earners - https://www.hackerrank.com/challenges/earnings-of-employees/problem?h_r=internal-search
문제 풀이는 더보기 클릭
문제 ) salary * months 의 결과값 중에 가장 큰 값을 몇 명이 받고 있는지 조회해라
1) WHERE절 서브쿼리에서 WHERE = 를 사용한 풀이
-- salary * months = earnings 값이 제일 큰 사람
SELECT months * salary AS earnings
, count(employee_id)
FROM Employee
WHERE months * salary = (SELECT MAX(months * salary) FROM employee)
GROUP BY earnings
2) HAVING절 서브쿼리를 사용한 풀이
SELECT months * salary AS earnings
,COUNT(*)
FROM Employee
GROUP BY earnings
HAVING earnings = (SELECT MAX(months * salary) FROM Employee)
LEETCODE
184. Department Highest Salary - https://leetcode.com/problems/department-highest-salary/
문제 풀이는 더보기 클릭
SELECT d.name AS department
, e.name AS employee
, e.salary
FROM employee AS e
INNER JOIN (SELECT departmentid
, MAX(salary) AS max_salary
FROM employee
GROUP BY departmentid
) AS dh ON e.departmentid = dh.departmentid
AND e.salary = dh.max_salary
INNER JOIN department AS d ON d.id = e.departmentid
해설은 차후 업로드
< 기초 SQL 시리즈 >
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 1부
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 2부
2020/07/14 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 기초 SQL - 3부 完
< 중급 SQL 시리즈 >
2020/07/15 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 1부
2020/07/15 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 2부
2020/07/16 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 3부
2020/07/16 - [Database/SQL] - [백문이불여일타] 데이터 분석을 위한 중급 SQL - 4부 完
이 포스팅은 해당 강좌를 수강하며 작성하였습니다.
[백문이불여일타] 데이터 분석을 위한 고급 SQL - 인프런
SQL 고급 이론을 배우고, 실습 문제를 함께 풀어봅니다. 중급이상 데이터 분석 데이터베이스 데이터베이스 SQL 데이터 분석 온라인 강의 실무에 필요한 연산을 효율적으로 처리하기 위한 SQL의 고�
www.inflearn.com
'Database > SQL' 카테고리의 다른 글
[백문이불여일타] 데이터 분석을 위한 고급 SQL - 1부 (0) | 2020.07.17 |
---|---|
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 4부 完 (0) | 2020.07.16 |
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 3부 (0) | 2020.07.16 |
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 2부 (0) | 2020.07.15 |
[백문이불여일타] 데이터 분석을 위한 중급 SQL - 1부 (0) | 2020.07.15 |