본문 바로가기

공부 기록/Database

정렬, 집계 함수, 그룹핑

ORDER BY(정렬)

  • 조회 결과를 특정 attribute(s) 기준으로 정렬하여 가져오고 싶을 때 사용한다.
  • 오름차순 정렬은 ASC(default 정렬 방식), 내림차순 정렬은 DESC로 표기한다.
SELECT * FROM EMPLOYEE ORDER BY dept_id (ASC), salary DESC;
  • dept_id 순으로 정렬하되, dept_id 그룹 별로는 salary 내림차순으로 정렬된다.

aggregate function(집계 함수)

  • 여러 tuple들의 정보를 요약해서 하나의 값으로 추출하는 함수
  • 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수가 있다.
  • (주로) 관심있는 attribute에 사용된다.
  • NULL 값들은 제외하고 요약 값을 추출한다.
SELECT COUNT(*) FROM employee;

⬇️ 프로젝트 2002에 참여한 임직원 수, 최대 연봉, 최소 연봉, 평균 연봉을 알고 싶다면

SELECT COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
WHERE W.proj_id = 2002;

group by(그룹핑)

  • 관심있는 attribute(s) 기준으로, 그룹 별로 aggregate function을 적용하고 싶을 때 사용한다.
  • Grouping attribute(s) : 그룹을 나누는 기준이 되는 attribute(s)
  • grouping attribute(s)에 NULL 값이 있을 때는 NULL 값을 가지는 tuple끼리 묶인다.

⬇️ 각 프로젝트에 참여한 임직원 수, 최대 연봉, 최소 연봉, 평균 연봉을 알고 싶다면

SELECT W.proj_id, COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
GROUP BY W.proj_id;

HAVING

  • GROUP BY와 함께 사용한다.
  • aggregate function의 결과값을 바탕으로 그룹을 필터링할 때 사용한다.
  • HAVING 절에 명시된 조건을 만족하는 그룹만 결과에 포함된다.

⬇️ 프로젝트 참여 인원이 7명 이상인 프로젝트들에 대해서, 각 프로젝트에 참여한 임직원 수, 최대 연봉, 최소 연봉, 평균 연봉을 알고 싶다면

SELECT W.proj_id, COUNT(*), MAX(salary), MIN(salary), AVG(salary)
FROM works_on W JOIN employee E ON W.empl_id = E.id
GROUP BY W.proj_id
HAVING COUNT(*) >= 7;

SELECT 실행 순서

6- SELECT attribute(s) or aggregate function(s)
1- FROM table(s)
2- WHERE condition(s)
3- GROUP BY group attribute(s)
4- HAVING group condition(s)
5- ORDER BY attribute(s)
  • SELECT 쿼리에서 각 절(phrase)의 실행 순서는 개념적인 순서이다.
  • 실제 실행 순서는 각 RDBMS에서 어떻게 구현했는지에 따라 다르다.

'공부 기록 > Database' 카테고리의 다른 글

MQL, Query Filter, Operator  (0) 2023.06.24
MongoDB 설치하기  (0) 2023.06.23
Join  (0) 2023.06.02
Three-Valued Logic  (0) 2023.05.04
쿼리 안의 쿼리(서브쿼리)  (0) 2023.05.02