그룹화 짓다?
우리가 데이터를 그룹 짓는 이유가 무엇일까?
데이터일 뿐인 조각들을 그룹지어 유의미한 정보를 만들어내기 위함이다.
유의미한 정보 중에서도 GROUP BY의 용도는 데이터를 집계하는 데 특화되어 있는데
때문에 GROUP BY는 반드시 집계 함수, 그룹 함수와 함께 사용해야 한다는 주의점이 있다.
아래의 쿼리문이 가장 GROUP BY의 특성을 잘 보여주는 사례라고 생각해서 준비해봤다.
SELECT
ProductID,
SUM(Quantity) AS QuantitySum -- 2. 상품ID별 판매량의 총계를 구해 QuantitySum이라는 컬럼명으로 표시한다.
FROM OrderDetails -- 0. 주문상세 테이블에서!
GROUP BY ProductID -- 1. 상품ID로 그룹지어
ORDER BY QuantitySum DESC; -- 3. 출력할 때 판매량을 내림차순으로 표시한다
이 쿼리문은 OrderDetails 테이블에서 ProductID별 Quantity의 합계를 내림차순으로 정렬하고 QuantitySum이라는 컬럼명으로 조회하도록 하는 쿼리문이다.
해당 쿼리문에서 ProductID와 Quantity라는 데이터를 통해 ProductID(상품)별 Quantity(개수)의 합계라는 '정보'를 출력한다.
실상황에서는 상품별 전체 수량을 조회하기 위한 쿼리문으로 사용될 것이고, 확장되어 이런 정보들이 모여 통계를 표시할 수 있게 된다!
HAVING..?
이런 정보를 사용자가 원하는 입맛에 맞게 조건을 부여해주는 것이 HAVING이라는 명령문.
HAVING을 처음 접하셨다면 WHERE문과 헷갈릴 수 있을 것이다.
물론 필자 또한 그랬다...
간단하게 말하자면,
WHERE문은 테이블의 컬럼에 조건을 부여하는 역할.
이런 WHERE문과 달리 HAVING문은 그룹화된 정보 내에서 조건을 지정하여 값을 조회한다.
말이 좀 어렵다고 생각한다!
간단하게 예를 들어서 말하기 위해 GROUP BY 예제 코드를 응용하여 보여드리겠다.
SELECT
ProductID,
SUM(Quantity) AS QuantitySum
FROM OrderDetails
GROUP BY ProductID
HAVING COUNT ≥ 3
ORDER BY QuantitySum DESC;
`HAVING COUNT ≥ 3` 한 라인만 추가되었다.
이 라인으로 인해 상품별 합계 중 합계가(=그룹화 된 항목의 합계가) 3 이상인 것만 출력할 수 있게 된 것이다.
이렇게 간략하게 GROUP BY와 HAVING문에 대해 살펴보는데, 모두가 필자처럼 해당 개념을 헷갈리지 않았으면 한다!
읽어주셔서 감사하다!!!!!!!!
'데이터베이스_Database > SQL' 카테고리의 다른 글
[SQL] Constraint, 제약조건 (0) | 2024.04.13 |
---|---|
[SQL]MySQL Oracle_SQL의 날짜 포맷 (2) | 2023.12.03 |
[Oracle SQL][프로그래머스_131537] 오프라인/온라인 판매 데이터 통합하기 (0) | 2023.12.03 |
[SQL]UNION, UNION ALL 차이 (0) | 2023.12.03 |
[MySQL][프로그래머스_131536] 재구매가 일어난 상품과 회원리스트... (2) | 2023.11.30 |