자격증/SQLD
[개미의 걸음 SQLD 2과목] DML② SELECT문의 GROUP BY절, HAVING절, ORDER BY절
IT개미 데이터
2020. 12. 25. 07:07
728x90
GROUP BY
SELECT 칼럼명.연산 FROM 테이블명 GROUP BY 테이블명;
SELECT 칼럼명.연산 FROM 테이블명 GROUP BY 테이블명 HAVING 조건;
행들을 소그룹화 하여 최대, 최소, 평균 등을 계산할 때 사용
- SELECT문에 집계 함수를 함께 사용하여 GROUP BY에 의해 지정된 그룹을 계산
- 조건을 사용할 때는 HAVING절을 함께 사용
→ HAVING절은 일반적으로 GROUP BY절 뒤에 위치 - GROUP BY는 SELECT절과 달리 ALIAS(별칭)를 사용할 수 없음!
- GROUP BY ()은 소그룹화할 기준이 없으므로 전체 컬럼을 하나의 그룹으로 처리
- WHERE절은 전체 데이터를 GROUP으로 나누기 전에 행들을 미리 제거시키는 역할을 수행
- 중첩된 집계함수의 경우[ex> AVG[COUNT(*)]] 최종 결과는 1건
→ GROUP BY절에 기술한 칼럼을 SELECT 문에 사용할 수 없음!!
→ 즉, SELECT문에 중첩된 집계함수만 사용
집계함수[Aggregate Function]
여러 행들이 묶인 하나의 그룹에서 단 하나의 결과를 출력하는 다중행 함수
함수명 | 설 명 | 유형별 가능여부 |
AVG | 지정한 열의 평균값 반환 | 수치형 |
COUNT | 테이블의 특정 조건이 맞는 행의 개수를 변환 COUNT(*) : NULL값을 포함한 행의 수를 출력 COUNT(표현식) : NULL값을 제외한 행의 수를 출력 # 표현식에 기본키가 들어가는 경우 위의 두 식은 같은 결과 → 기본키는 NULL값을 가지지 않으므로!!!! |
수치형, 문자형 |
SUM | 지정한 열의 총합을 반환 | 수치형 |
STDDEV | 지정한 열의 표준편차를 반환 | 수치형 |
VARIAN | 지정한 열의 분산을 출력 | 수치형 |
MIN | 지정한 열의 가장 작은 값을 반환 | 수치형 |
MAX | 지정한 열의 가장 큰 값을 반환 | 수치형 |
- GROUP BY에서 SELECT절에 사용하는 집계함수
- 집게함수의 통계정보는 NULL값을 가진 행을 제외하고 수행
- 집계함수는 WHERE절에 올 수 없음
→ 집계함수를 사용할 수 있는 GROUP BY절보다 WHERE절이 먼저 수행됨
728x90
ORDER BY
SELECT 칼럼명.연산 FROM 테이블명 ORDER BY 칼럼명 ASC/DESC... ;
SELECT 칼럼명.연산 FROM 테이블명 WHERE 조건 ORDER BY 칼럼명 ASC/DESC... ;
SELECT 칼럼명.연산 FROM 테이블명 GROUP BY 테이블명 HAVING 조건 ORDER BY 칼럼명 ASC/DESC... ;
SQL문으로 출력될 데이터들을 보기 용이하게 특정 컬럼을 기준으로 정렬할 때 사용
- ORDER BY를 함께 사용할 경우 조회된 데이터를 오름차순[ASC] 혹은 내림차순[DESC]으로 정렬 가능
→ 조회된 데이터를 출력해주기 전 정렬해서 사용자가 보기 용이하게 정렬해서 출력
→ 대량의 데이터 정렬시 데이터베이스 메모리 사용량이 증가해 성능 저하 발생 - 생략시 오름차순 정렬
- 숫자형 데이터 타입은 오름차순으로 정렬했을 경우, 가장 작은 값부터 출력
- ORDER BY절에서 CASE WHEN구문 사용하면 사용자가 원하는 순서대로 정렬가능
→ CASE WHEN구문 사용시, 숫자형 데이터 타입일 경우 작은 값부터 출력
→ "CASE WHEN 조건 THEN 결과"를 이용해 결과값에 원하는 숫자 기입 - 날짜형 데이터 타입은 오름차순으로 정렬했을 경우, 가장 빠른 날짜부터 출력
- ORACLE에서 NULL 값은 가장 큰 값으로 간주
→ 오름차순 정렬시 가장 마지막에 정렬
→ 내림차순 정렬시 가장 처음에 정렬 - SQL Server에서 NULL 값은 가장 작은 값으로 간주
→ 오름차순 정렬시 가장 처음에 정렬
→ 내림차순 정렬시 가장 마지막에 정렬 - ORDER BY절에 집계함수 사용 가능
- GROUP BY절과 함께 사용할 경우, GROUP BY절에 언급되지 않은 칼럼을 ORDER BY에서 사용할 수 없음!
- SELECT절에 언급되지 않은 칼럼명을 ORDER BY절에 사용 가능
→ 오라클은 행기반 데이터베이스이므로 데이터 액세스시 행 전체 칼럼을 메모리에 로드하므로 SELECT절에 기술되지 않은 칼럼으로도 정렬 가능 - INLINE VIEW와 함께 사용할 경우, INLINE VIEW에서 사용할 칼럼명들을 미리 지정
→ INLINE VIEW의 SELECT절에 언급된 칼럼 이외의 칼럼명을 ORDER BY에서 사용할 수 없음! - TOP(숫자)을 함께 사용할 때 동일한 값을 함께 출력하기 위해서는 "WITH TIES 칼럼명1, 칼럼명2..."옵션 사용
→ TOP(숫자)는 내림차순으로 정렬하여 숫자에 해당하는 등수만큼의 값만 표기
728x90