CS/데이터베이스

[Database] GROUP BY, HAVING, ORDER BY 정리

대기업 가고 싶은 공돌이 2024. 8. 20. 19:07

GROUP BY 절

  • 각 행을 특정 조건에 따라 그룹으로 분리하여 계산하도록 하는 구문식
  • group by 절에 그룹을 지정할 컬럼을 전달 (여러 개 전달 가능)
  • 만약 그룹 연산에서 제외할 대상이 있다면 미리 where 절에서 해당 행을 제외함
    (WHERE 절이 GROUP BY 보다 먼저 수행되므로)
  • 그룹에 대한 조건은 where 절에서 사용할 수 없음
  • select 절에 집계함수를 사용해서 그룹 연산 결과를 표현해야 한다.
  • GROUP BY 절을 사용하면 데이터가 요약되므로 요약되기 전 데이터는 select 절에 출력할 수 없다.

출처: 홍쌤의 데이터 랩

sql의 실행 순서는 from -> where -> group by -> having 이다

 

group by에서 그룹핑이 되기 때문에 그 이전에 수행되는 where에서는 집계함수를 사용할 수가 없다.

 

따라서 having절에서 집계함수를 활용한 조건을 걸 수 있다.

 

HAVING 절

  • 그룹 함수 결과를 조건으로 사용할 때 사용하는 절이다.
  • WHRER 절을 사용하여 그룹을 제한할 수 없으므로 HAVING절에 전달한다.
    • HAVING 절이 GROUP BY절 앞에 올 수는 있지만 뒤에 쓰는 것을 권장한다.
    • 내부적 연산 순서가 SELECT 절보다 먼저이므로 SELECT 절에서 선언된 ALIAS 사용 불가하다.

출처: 홍쌤의 데이터랩

위와 같이 where에 집계함수를 사용하면 에러가 발생한다.

 

출처: 홍쌤의 데이터 랩

다음과 같이 where 와 having 둘 다 사용가능한 in 조건 같은 경우  where에서 먼저 필터링을 해주고

group by를 통해 집계 되는 것이 (거를 것을 먼저 거르고 그룹핑 하는 것이기에) 성능상 더 이점이 있다.

 

ORDER  BY 절

  • 데이터는 입력된 순서대로 출력되나, 출력되는 행의 순서를 사용자가 변경하고자 할 때 ORDER BY를 사용한다.
  • ORDER BY 뒤에 명시된 컬럼 순서대로 정렬이 이뤄진다. -> 1차 정렬, 2차 정렬 전달이 가능하다.
  • 정렬 순서를 오름차순 (ASC) 내림차순 (DESC)로 설정할 수 있다. (기본 설정은 오름차순이다.)
  • 유일하게 SELECT 절의 ALIAS를 사용할 수 있다.

출처: 홍쌤의 데이터 랩

다음과 같이 3이라는 숫자로도 정렬이 가능하다.

여기서 3은 SELECT 절의 컬럼 순서를 의미한다. 3이니까 HIRE_DATE를 기준으로 정렬하라는 의미다.

 

복합 정렬

  • 먼저 정렬한 값의 동일한 결과가 있을 경우 추가적으로 정렬이 가능하다.
    • 1차 정렬한 값 중 동일한 값의 내부에서 2차 기준을 바탕으로 정렬이 이뤄짐

출처: 홍쌤의 데이터랩