본문 바로가기
자격증/SQLD

SQL 기본 및 활용 - SQL기본 - GROUP BY, HAVING 절 / ORDER BY 절

by Love of fate 2024. 2. 29.
728x90
반응형

[05] GROUP BY 절

(1) GROUP BY 

  - GROUP BY 는 말 그대로 데이터를 그룹별로 묶을 수 있도록 해주는 절이다.

    GROUP 뒤에 수단의 전치사인 BY가 붙었기 때문에 GROUP BY 뒤에는 그룹핑의 기준이 되는 컬럼이 오게 된다.

    컬럼은 하나가 될 수도 있고 그 이상이 될 수도 있다.

 

(2) 집계 함수 

 - 데이터를 그룹별로 나누면 그룹별로 집계 데이터를 도출하는 것이 가능해진다.

COUNT(*) 전체 ROW를  COUNT하여 반환
COUNT(컬럼) 컬럼값이 NULL인 ROW를 제외하고 COUNT하여 반환
COUNT(DISTINCT 컬럼) 컬럼값이 NULL이 아닌 ROW에서 중복을 제거한 COUNT를 바환
SUM(컬럼) 컬럼값들의 합계를 반환
AVG(컬럼) 컬럼값들의 평균을 반환
MIN(컬럼) 컬럼값들의 최솟값을 반환
MAX(컬럼) 컬럼값들의 최댓값을 반환

 

(3) HAVING

 - HAVING 절은 GROUP BY 절을 사용할 때 WHERE처럼 사용하는 조건절이라고 생각하면 되는데 주로

   데이터를 그룹핑한 후 특정 그룹을 골라낼 때 사용한다.

 

   HAVING 절은 논리적으로 GROUP By 절 이후에 수행되기 때문에 그룹핑 후에 가능한 집계함수로

   조건을 부여할 수 있다.

 

- HAVING 절은 논리적으로 SELECT절 전에 수행되기 때문에 SELECT 절에 명시되지 않은  집계함수로도 조건을

  부여할 수 있다.

 

- 주의할 점은 WHERE 절을 사용해도 되는 조건까지 HAVING 절로 써버리면 성능상 불리할 수 있다는 것이다.

   (수행 시 오류가 나지는 않는다)

   - 왜냐하면 WHERE 절에서 필터링이 선행되어야 GROUP BY를 할 데이터량이 줄어들기 때문이다.

     GROUP By 는 비교적 많은 비용이 드는 작업이므로 수행전에 데이터량을 최소로 줄여놓는 것이 바람직하다.

 

[06] ORDER BY 절

 - ORDER BY 절을 사용하면 SELECT한 데이터를 정렬할 수 있으며 ORDER BY 절을 따로 명시하지 않으면 데이터는 임의의 순서대로 출력된다.

  • ASC(Ascending) : 오름차순
  • DESC(Descending) :  내림차순

* 옵션 생랼 시 ASC가 기본값이 된다.

 

TIP

정렬의 기준이 되는 컬럼에 NULL 데이터가 포함되어 있을 경우 데이터베이스 종류에 따라 정렬의 위치가 달라지는 데 Oracle의 경우에는 NULL을 최댓값으로 취급하기 때문에 오름차순을 했을 경우 맨 마지막에 위치하게 된다.

(SQL Server는 반대) 

만약 순서를 변경하고 싶다면 ORDER BY 절에 NULLS FIRST, NULLS LAST 옵션을 써서

NULL의 정렬상 순서를 변경할 수 있다.

728x90
반응형