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부 完

 

 

 

이 포스팅은 해당 강좌를 수강하며 작성하였습니다.

https://www.inflearn.com/course/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D-%EA%B3%A0%EA%B8%89-SQL/dashboard

 

[백문이불여일타] 데이터 분석을 위한 고급 SQL - 인프런

SQL 고급 이론을 배우고, 실습 문제를 함께 풀어봅니다. 중급이상 데이터 분석 데이터베이스 데이터베이스 SQL 데이터 분석 온라인 강의 실무에 필요한 연산을 효율적으로 처리하기 위한 SQL의 고�

www.inflearn.com

 

 

 

기념 스크린샷

+ Recent posts