3. 검색문의 GROUP BY 절과 HAVING절
- SELECT문의 GROUP BY절과 HAVING절
-> HAVING을 이용하면 원하는 특정 그룹만 선택 가능하다.
-> 집단 함수를 함께 사용해서 그룹별 통계치를 생성한다.
(1) 집단함수(Aggregate Functions)
- 집단함수명 ( [ALL 또는 DISTINCT] 컬럼명 또는 표현식 )
ex) COUNT, SUM, AVG, MIN, MAX, STDDEV, VARIAN
- 집단 함수는 WHERE절에 사용할 수 없다. (HAVING 절에는 가능)
(2) GROUP BY절
- 표준SQL에서는 WHERE, GROUP BY절에서 alias 사용 불가능
- MySQL에서는 GROUP BY절 사용 가능
- 집단 함수의 중첩은 허용하지 않는다.
- GROUP BY절의 중첩 불가능
(3) HAVING절
- 형식
-> WHERE 투플_조건식: 투플 조선식이 true인 "투플"만 선택
-> HAVING 그룹_조건식: 그룹 조건식이 true인 "그룹"만 선택
- HAVING절을 WITH절로 변환할 수도 있다.
(4) 검색문의 ORDER BY절
- ASC(디폴트), DESC
- 컬럼명 대신 alias나 컬럼위치(position)도 가능
- MySQL, SQL Server에는 null이 가장 작은 값
- Oracle에서는 null이 가장 큰 값
- SELECT 목록에 나타나지 않은 컬럼을 ORDER BY절에 사용 가능하다.
-> GROUP BY절을 같이 사용하면, SELECT목록에 나타나지 않은 컬럼을 ORDER BY절에 사용할 수 없다.
(5) LIMIT절
- SELECT문이 출력하는 최대 투플 수를 정의한다.
- MySQL에서만 가능하며 Oracle의 ROWNUM과 유사하다.
- 형식
-> offset: 결과에 포함할 첫번째 투플의 위치
-> row_count: 결과로 리턴할 투플의 최대 수
- 동점자 처리는 못 한다.
- Top_n Query: 순위(등수)가 높은 n개 투플을 검색, 동점자 처리 기능을 제공해야한다.
-> ORDER BY절은 사용 불가 (데이터를 먼저 검색한 후, 마지막으로 정렬한다. )
- 윈도우 함수(Window Functions)를 사용한 Top_n Query 처리
-> ROW_NUMBER(): 투플에 일련번호를 부여한다. pagination에 활용
-> RANK(): 투플 순위를 제공하고 동점자 처리
Ex) ROW_NUMBER() OVER (ORDER BY ...)
RANK() OVER (ORDER BY ...)
- 윈도우 함수 주의사항
-> SELECT문에서만 사용가능
-> WHERE절이나 GROUP BY절에서 윈도우 함수의 컬럼 별칭 사용 불가능하다.
-> WITH절을 사용해서 해결가능!
본 게시글은 프로그래머스의 "학교 밖에서 듣는 전공 필수SQL/DB Essentials" 강의 내용을 토대로 업로드 했습니다.
'컴퓨터 과학 > [프로그래머스] SQL DB Essentials' 카테고리의 다른 글
[3주차] 강의노트 DML- Function & Update (0) | 2022.03.12 |
---|---|
Chapter 06 DML : 내장 함수와 갱신문 (0) | 2022.03.08 |
[2주차] 강의노트 DDL & DML (0) | 2022.03.05 |
Chapter 04 DML : 단일테이블 검색문(Part 1) (0) | 2022.03.02 |
Chapter 03 스키마와 테이블 정의를 위한 명령문 (0) | 2022.02.28 |