손에 잡히는 10분 SQL 10장 참고
GROUP BY
SELECT vend_id, COUNT(*) as num_prods
FROM PRODUCTS
GROUP BY vend_id
- vend_id가 같으면 count 값도 증가한다.
- 해당 vend_id의 제품이 몇 개 있는 지를 알 수 있다.
특징
- 데이터를
GROUP BY
뒤에 오는 열을 기준으로 그룹핑 한 후 계산한다 - 중첩(nested) 그룹을 만들기 위해서는
GROUP BY
뒤에 원하는 만큼 열을 적으면 된다- 마지막에 지정된 그룹에서 요약된다
GROUP BY
절에 쓸 수 있는 열- 그룹함수는 안 됨
- 별칭 사용 불가
SELECT
에 수식을 사용했다면GROUP BY
에서도 똑같이 써줘야 한다
- 그룹 함수를 제외하고는
SELECT
에 있는 열은GROUP BY
에도 존재해야 한다 - NULL 값도 그룹으로 가져와진다
- 작성 순서 :
WHERE
->GROUP BY
-> HAVING ->ORDER BY
SELECT
에서 가져온 열의 순서로GROUP BY
에서 열을 지정할 수 있다- ex) GROUP BY 2,4
그룹 필터링 : HAVING
HAVING은 그룹핑한 결과를 기반으로 필터링할 수 있게 해준다
WHERE과 유사한 기능을 하지만 WHERE은 행을 필터링하고, HAVING은 그룹을 필터링 한다. 그래서 WHERE에서의 문법과 옵션을 HAVING에서도 똑같이 사용할 수 있다.
SELECT cust_id, COUNT(*) as orders
FROM ORDERS
GROUP BY cust_id;
여기에 HAVING만 추가해보았다.
SELECT cust_id, COUNT(*) as orders
FROM ORDERS
GROUP BY cust_id
HAVING COUNT(*) >=2;
이렇게 HAVING은 그룹핑된 이후에 필터링을 한다.
SELECT vend_id, COUNT(*) AS num_prods
FROM Products
WHERE prod_price>=4
GROUP BY vend_id
HAVING COUNT(*) >=2;
이렇게 where 과 having을 둘 다 사용해야 할 경우도 있다.
'Database > SQL' 카테고리의 다른 글
[코테를 위한 Oracle 정리] 9. 테이블 JOIN (0) | 2024.08.04 |
---|---|
[코테를 위한 Oracle 정리] 8. 서브쿼리 (0) | 2024.08.04 |
[코테를 위한 Oracle 정리] 6. 그룹 함수를 사용해 데이터 요약하기 (0) | 2024.08.03 |
[코테를 위한 Oracle 정리] 5. 데이터 조작 : 내장 함수 (0) | 2024.08.01 |
[코테를 위한 Oracle 정리] 4. 열 계산 및 연결하기 (0) | 2024.07.31 |