정말 핵심적인 문법이다
꽃이라고 불릴 만큼 중요하게 보는 부분이 바로 이 GROUP BY이지만
위에 보이는 것처럼 예쁜 꽃이 될 수도, 예쁘지만 가시가 달린 장미가 될 수도 있다
그만큼 중요하고, 처음 잘못 익혀두면 오래 고생할 문법이니 잘 익혀두도록 하자
지난 이야기
이번 글의 최종적인 구조 미리 보기
순서 틀리면 큰일난다
SELECT
FROM
WHERE
GROUP BY
HAVING;
DESC(개별 작동)
그래서 작성자는
SF WGHD = SF영화 WarGraymonHD(워 그레이몬 HD)
라고 외웠다
참고로 디지몬 팬은 아니다
(광고 아님, 사진 출처용) 구매를 원한다면 이쪽으로 가면 된다
GROUP BY - 구조
SELECT custId, sum(saleprice), count(*)
FROM Orders
GROUP BY custId;
위 SQL문을 해석해보자면
(FROM) Orders 테이블에서
(SELECT) custId를 선택하고, saleprice의 합계를 구하고, 전체를 count 하는데,
(GROUP BY) custId를 기준으로 그룹을 지으며 위 작업을 진행하라
라는 의미로 볼 수 있다
※주의※ GROUP BY로 선택한 칼럼을 제외한 나머지 칼럼들에 대해서 SELECT 할 때 집계 함수를 써야만 돌아간다
집계 함수란?
MAX, COUNT, MIN, SUM 등등
데이터를 모아서 그 결과를 내는 함수
SF WGHD에서 이 순서대로 들어가 있다는 것을 알 수 있다
어? 왜 집계 함수에는 조건문이 붙지 않지??
(어? 금지이지만 이론을 설명하는 자리이므로 넘어가도록 하겠다)
HAVING - 구조
SELECT custId, sum(saleprice), count(*)
FROM Orders
WHERE saleprice >= 8000
GROUP BY custId
HAVING COUNT(*) >= 2;
이때를 위해 준비된 HAVING이라는 함수
집계함수에 조건문을 붙일 수 있는 기능을 가지고 있어
보다 세밀한 데이터 필터링이 가능하다
만약 에러가 났다면?
SELECT 해주지 않은 항목에 대해 GROUP BY를 해도 큰일 나고
GROUP BY 뒤에 쓰여있지 않은 다른 모든 함수에 집계 함수를 써주지 않아도 큰일 난다
HAVING의 위치는 SQL문 제일 아래쪽에 써야 한다
그리고 WHERE에 쓰지 못했던 집계 함수를 마음껏 써주면 된다
그렇지 않으면.. 왜 에러가 나오는지도 모르는 무한한 고통을 겪을 수 있으니 주의하자
DESC - 구조
DESC = 역순 정렬(내림차순)?
사실 맞는 말이지만 여기서 다룰 내용은 조금 다르다
ORDER BY 뒤에 오름차순/내림차순을 결정할 때 쓰이는 함수가 아닌
테이블 데이터의 형태를 파악하는 기능의 절이다
직접 한 번 해보도록 하겠다
DESC Book;
위와 같이 단일 절로 쓰이며 아래와 같은 결과가 나온다
Book테이블의 기본적인 정보가 출력되는 모습을 볼 수 있다
실습을 통해 실력을 더 늘려보고 싶다면?
↓ ↓ ↓
다음 포스팅으로 가고 싶다면?
↓ ↓ ↓
'Development Study > Backend' 카테고리의 다른 글
[SQL] 연습 문제 ( GROUP BY ~ CREATE ) (0) | 2022.10.20 |
---|---|
[SQL] 데이터분석의 농경지, CREATE TABLE (0) | 2022.10.20 |
[SQL] 일주일 뒤에 풀어보는 SQL ( SELECT함수 ~ 집계 함수 ) (2) | 2022.10.14 |
[SQL] 연습 문제 ( SELECT함수 ~ 집계 함수 ) (0) | 2022.10.08 |
[SQL] 저장된 데이터를 원하는 대로 찾아보자 ( SELECT ~ 집계 함수 ) (0) | 2022.10.07 |