2024. 2. 27. 16:36ㆍ[Way to PM] SQL
Over View
해당 글은 postgreSQL에서 데이터조회 시 그룹화 및 정렬 기능을 다룰 때 각 기능에 대한
구분에 대해 다룹니다.
기본적으로 데이터를 조회하고 조건을 붙일 때
SELECT 열 FROM 테이블
WHERE 필터조건
위와 같은 과정을 거칩니다.
여기서 같은 값을 가진 행끼리 하나의 그룹으로 뭉치는 기능이 그룹화입니다.
그룹화는 다양한 기준으로 데이터를 분석할 수 있어 핵심 기능 중 하나입니다.
다음과 같은 테이블이 있다고 가정했을 때,
- (WHERE) 나이가 29세 이상인 학생만 필터링
- (GROUP BY) 주소를 기준으로 그룹핑
- (HAVING) 학생 수가 2명 이상인 그룹만 필터링
- (ORDER BY) 학생 수가 많은 순서대로 정렬
다음과 같은 결과를 출력할 수 있습니다.
address | count |
경기도 | 3 |
서울특별시 | 2 |
전라북도 | 2 |
이를 쿼리로 짜보면 다음과 같습니다.
SELECT address, COUNT(*)
FROM students
WHERE age >= 29
GROUP BY address
HAVING COUNT(*) >= 2
ORDER BY COUNT(*) DESC;
GROUP BY 부터 특징을 살펴보면
1. GROUP BY
-WHERE 절 뒤에 위치한다.
-어떤 열을 기준으로 그룹화할지 명시해야 한다.
-GROUP BY 절에 명시된 열은 SELECT 절에도 존재하여야합니다.
-WHERE 절 실행 후에 GROUP BY가 실행됩니다.
2. HAVING
- HAVING은 GROUP BY 절에 의해 생성된 그룹 중에서 원하는 조건에 부합하는 그룹 만을 선택하는 구문입니다.
- GROUP BY 연산 후 HAVING절에 의해 필터링됩니다.
3. ORDER BY
-어떤 열을 기준으로 정렬할지 명시한다.
-ORDER BY절에 명시된 열은 SELECT절에는 없어도 된다.
-내림차순인 DESC, 오름차순인 ASC가 있고 기본값으로 ASC가 적용된다.
따라서 앞서 기재한 쿼리를 분석해보면
나이가 29세 이상인 학생들의 수와 주소를, 주소를 기준으로 그룹화하여 조회한다. 이때 2명 이상에 해당하는 주소만 출력하며, 해당 주소에사는 학생들의 수를 기준으로 내림차순 정렬을 한다.
문법은 아래와 같다.
SELECT 열, 집계함수
FROM 테이블
[WHERE 필터 조건]
GROUP BY 열
HAVING 그룹 필터 조건
ORDER BY 열 [ASC | DESC]
특정 열을 집계하는 함수를 차용하는 경우, GROUP BY로 그룹화하지 않으면 오류가 난다. 또한 WHERE와 HAVING에서 필터 조건 간의 차이를 구분하여야 할 필요도 있다.
'[Way to PM] SQL' 카테고리의 다른 글
[Way to PM] SQL - pgAdmin4에서 postgreSQL 시작하기 (0) | 2024.02.23 |
---|