이 게시글은 이틀 동안 DataCamp의 Introduction to SQL 코스의 내용을 제가 기억할 수 있도록 정리한 것으로, 아주 기초적인 내용으로 구성되어 있습니다.
GROUP BY
SQL에서는 GROUP BY절을 통해 그룹화된 정보를 도출해낼 수 있다. 'GROUP BY 그룹화 조건이 되는 컬럼명'의 형태로 사용된다. 아래의 쿼리를 실행하면 각 성별에 따른 직원 수를 조회할 수 있다.
SELECT sex, count(*) FROM employees GROUP BY sex;
* SELECT 절에서 GROUP BY 절에 사용하지 않은 컬럼을 사용하려고 하면 오류를 발생시킨다.
ex. 개봉 연도별 영화의 개봉 연도와 그 해에 개봉한 영화의 개수 조회
SELECT release_year, COUNT(*) FROM films GROUP BY release_year;
ex. 개봉 연도별 영화의 개봉 연도와 평균 상영시간 조회
SELECT release_year, AVG(duration) FROM films GROUP BY release_year;
ex. 개봉 연도별 영화의 개봉 연도와 최대 예산 조회
SELECT release_year, MAX(budget) FROM films GROUP BY release_year;
GROUP BY 절과 ORDER BY 절 함께 사용하기
ORDER BY절은 항상 SQL문의 가장 마지막에 위치한다. 이 때, 그룹화되어 계산되지 않은 값은 정렬될 수 없다.
ex. 개봉 연도별 가장 낮은 수익 조회
SELECT release_year, MIN(gross) FROM films GROUP BY release_year;
ex. 언어별 총 수익
SELECT language, SUM(gross) FROM films GROUP BY language;
ex. 개봉 연도 및 국가별로 개봉 연도, 국가, 영화 제작에 사용된 최고 예산를 개봉 연도, 국가 순으로 정렬
SELECT release_year, country, MAX(budget)
FROM films
GROUP BY release_year, country
ORDER BY release_year, country;
ex. 개봉 연도 및 국가별로 국가, 개봉 연도, 최저 수익을 국가별, 개봉 연도 순으로 정렬
SELECT country, release_year, MIN(gross)
FROM films
GROUP BY release_year, country
ORDER BY country, release_year;
HAVING절을 이용해 그룹 조건 지정하기
GROUP BY절을 통해 그룹화한 결과 중 조건에 해당하는 결과만 조회할 때 HAVING절을 사용한다.
ex. 개봉 영화가 200개 초과인 연도(해)의 개수 조회
SELECT COUNT(*)
FROM (SELECT release_year FROM films GROUP BY release_year HAVING COUNT(*) > 200) AS RESULT;
* 서브 쿼리를 FROM절에 사용할 경우는 특별히 인라인 뷰라고 하며, 쿼리가 실행될 때만 사용되는 임시 뷰다. 인라인 뷰를 사용할 때 주의할 점은 해당 서브쿼리(인라인 뷰)에 대한 별칭을 꼭 명시해줘야 한다는 것이다.
* GROUP BY절에서는 SELECT문과 달리 별칭 사용 불가(ORDER BY절 등 다른 곳에서는 사용 가능)
ex. 1990년 이후에 나온 영화들에 한해 개봉 연도별 개봉 연도와 평균 예산, 평균 수익을 조회. 이 때 평균 예산이 6000만(원) 이상인 개봉 연도들만 가져온다.
SELECT release_year, AVG(budget) AS avg_budget, AVG(gross) AS avg_gross
FROM films
WHERE release_year > 1990
GROUP BY release_year
HAVING AVG(budget) > 60000000;
'Database > PostgreSQL' 카테고리의 다른 글
SQL) OUTER JOIN (0) | 2021.05.11 |
---|---|
SQL) INNER JOIN, CASE문, INTO (0) | 2021.05.01 |
SQL) DISTINCT를 통한 중복 제거, ORDER BY 절을 통한 레코드 정렬 (0) | 2021.04.30 |
SQL) 산술연산자, 집계 함수, AS(Alias), BETWEEN (0) | 2021.04.30 |
SQL) LIKE, NOT LIKE 연산자 (0) | 2021.04.30 |