Database ‐ 집계와 그룹핑 - dnwls16071/Backend_Summary GitHub Wiki
📚 집계 함수
- AVG : 표현식의 평균값
- COUNT(expression) : 표현식의 결과가 NULL이 아닌 행의 수를 반환
- COUNT(*) : 테이블 전체 행 수
- MAX(expression) : 표현식의 최댓값
- MIN(expression) : 표현식의 최솟값
- SUM : 지정한 숫자 컬럼의 모든 값을 더해 합계를 계산
📚 GROUP BY
- 특정 컬럼의 값이 같은 행들을 하나의 그룹으로 묶어주는 함수
- GROUP BY 절에 그룹화 기준이 될 컬럼을 지정하면 전체에 대한 통계가 아닌 각 그룹에 대한 통계를 낼 수 있다.
SELECT
CATEGORY,
COUNT(*) AS `카테고리별 주문 건수`
FROM
ORDER_STAT
GROUP BY
CATEGORY;
- GROUP BY는 NULL값 또한 하나의 독립된 그룹으로 취급하여 집계한다.
- 이런 NULL 그룹을 통해 데이터가 누락되었음을 발견할 수 있고 데이터 정제의 필요성을 인지할 수 있는 좋은 기회가 된다.
❗GROUP BY 주의사항 정리
- GROUP BY를 사용할 때, SELECT절에는 GROUP BY에 사용된 컬럼과 집계 함수만 사용할 수 있다.
📚 HAVING
- HAVING절은 GROUP BY절 바로 뒤에 위치하며, 그룹화된 결과에 대한 조건을 지정하는 역할을 한다.
- WHERE절은 그룹화 이전에 개개인을 걸러내는 조건이고 HAVING은 그룹화 이후에 그룹 자체를 걸러내는 조건이다.
SELECT
CATEGORY,
COUNT(*) AS PREMIUM_ORDER_COUNT
FROM
ORDER_STAT
WHERE
PRICE >= 10000
GROUP BY
CATEGORY
HAVING
COUNT(*) >= 2;
📚 SQL 실행 순서
SQL 쿼리의 논리적인 실행 순서
- FROM : 가장 먼저 실행된다. 어떤 테이블에서 데이터를 가져올지 결정한다.
- WHERE : FROM에서 가져온 테이블의 개별 행을 필터링한다. GROUP BY로 묶이기 전 날 것 그대로의 데이터를 1차로 거른다.
- GROUP BY : WHERE절의 필터링을 통과한 행들을 기준으로 그룹을 형성한다.
- HAVING : GROUP BY 절을 통해 만들어진 그룹들을 필터링한다. 집계 함수를 이용한 필터링이 여기서 이루어진다.
- SELECT : HAVING절까지 통과한 최종 그룹들에 대해 우리가 최종적으로 보고자 하는 컬럼을 선택하고 집계 함수 계산, 별칭 부여 등이 이 단계에서 이루어진다.
- ORDER BY : SELECT절에서 최종 결과 후보들을 지정된 순서대로 정렬한다.
- LIMIT : 정렬된 결과 중에서 최종적으로 사용자에게 반환될 행의 개수를 제한한다.