상세 컨텐츠

본문 제목

[개미의 걸음 SQLD 2과목] DML② SELECT문의 GROUP BY절, HAVING절, ORDER BY절

자격증/SQLD

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

관련글 더보기

댓글 영역