Home Database 7. group byaggregate functionorder by
Post
Cancel

Database 7. group byaggregate functionorder by

  • MySQL 문법을 기준으로 서술한다.

ORDER BY

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

aggregate function

  • 여러 tuple들의 정보를 요약해서 하나의 값으로 추출하는 함수
  • 대표적으로 COUNT, SUM, MAX, MIN, AVG 함수가 있다.
  • e.g. AVG(salary), MAX(birth_date)
  • NULL 값들은 제외하고 요약 값을 추출한다.
1
SELECT COUNT(*) FROM employee; -- 임직원 수를 알고 싶을 때. 여기서 *(asterisk)는 tuple 자체를 의미

GROUP BY

1
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; -- 각 프로젝트에 참여한 임직원 수와 최대 연봉과 최소 연봉과 평균 연봉을 알고 싶을 때
  • 관심있는 attribute(s) 기준으로 그룹을 나눠서 그룹별로 aggregate function을 적용하고 싶을 때 사용
  • grouping attribute(s) : 그룹을 나누는 기준이 되는 attribute(s)
  • grouping attribute(s)에 NULL 값이 있을 때는 NULL 값을 가지는 tuple끼리 묶인다.

HAVING

1
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; -- 프로젝트 참여 인원이 7명 이상인 프로젝트들에 대해서 각 프로젝트에 참여한 임직원 수와 최대 연봉과 최소 연봉과 평균 연봉을 알고 싶을 때
  • GROUP BY와 함께 사용한다.
  • aggregate function의 결과값을 바탕으로 그룹을 필터링하고 싶을 때 사용한다.
  • HAVING절에 명시된 조건을 만족하는 그룹만 결과에 포함한다.

SELECT 조회 Summary

1
2
3
4
5
6
SELECT attribute(s) or aggregate function(s) -- 실행 순서 : 6
FROM table(s) -- 1
[WHERE condition(s)] -- 2
[GROUP BY group attribute(s)] -- 3
[HAVING group condition(s)] -- 4
[ORDER BY attribute(s)]; -- 5
  • select 쿼리에 각 절(phase)의 실행 순서는 개념적인 순서이다.
  • select 쿼리의 실제 순서는 각 RDBMS에서 어떻게 구현했지는지에 따라 다르다.
    • 성능을 위한 Optimizer가 실행 순서를 변경한다.
This post is licensed under CC BY 4.0 by the author.

Database 6. join과 관련 지식 정리

Database 8. stored function