그룹화하기
엑셀의 피벗 테이블처럼 데이터를 그룹화하고, 필터링 하는 기능은 GROUP BY와 HAVING을 통해 구현할 수 있다. 아래는 기본 형식이다.
SELECT [열] FROM [테이블]
WHERE [열] = [조건값]
GROUP BY [열]
HAVING [열] = [조건값]
여기서 GROUP BY로 열은 여러개를 지정할 수 있다. 다음 쿼리는 열1을 먼저 그룹화하고, 그다음 열2를 그룹화한다.
SELECT [열1], [열2] FROM [테이블]
GROUP BY [열1], [열2]
그룹화 열 데이터 개수 확인하기 (COUNT)
피벗 테이블처럼 그룹화는 집계 함수와 함께 사용하는데, 그룹별로 데이터 개수를 세는 방법은 COUNT 함수를 활용하면 된다. 다음 쿼리는 이를 구현한 것이며, AS cnt는 개수를 센 결과를 출력할 때 열 이름을 cnt로 한다는 뜻이다. 다만, cnt는 실제 데이터가 아니라 출력에만 활용되므로 GROUP BY나 HAVING에서 찾는 열에서는 활용할 수 없다. 최종적으로 출력할 때 개수에 따라 정렬까지 수행하였다.
SELECT [열], COUNT(*) AS cnt FROM [테이블]
GROUP BY [열]
ORDER BY COUNT(*)
데이터 필터링 하기 (HAVING)
그룹화 데이터 필터링을 위해서는 HAVING을 사용한다. WHERE와 차이점은 WHERE 문은 테이블에 있는 열에 적용하는 것이고, HAVING은 SELECT나 GROUP BY에 있는 열에만 적용 가능하다. 아래 예시는 그룹화 열 데이터 개수가 100 이상인 것만 조회하는 쿼리이다.
SELECT [열], COUNT(*) AS cnt FROM [테이블]
GROUP BY [열]
HAVING COUNT(*) >= 100
중복 데이터 제거하기 (DISTINCT)
GROUP BY는 그룹화를 통해 중복을 제거할 수 있지만, 이외에 SELECT DISTINCT를 통해 중복 데이터를 제거할 수 있다. 아래 기본 형식은 해당 열의 중복 데이터를 제거하른 쿼리이다. 다만, 집계하는데 활용하기에는 제한이 있다.
SELECT DISTINCT [열] FROM [테이블]
'SQL' 카테고리의 다른 글
SQL로 서로 다른 테이블 조합(JOIN)하기 | INNER JOIN, OUTER JOIN, CROSS JOIN, SELF JOIN (0) | 2025.01.09 |
---|---|
SQL로 테이블 생성 및 조작하기 정리 | CREATE, INSERT, UPDATE, DELETE (0) | 2025.01.06 |
SQL 와일드 카드로 특정 문자열 검색하기 | %, _, [] (2) | 2025.01.03 |
SELECT 기본 구문 정리 | 조건, 정렬 기본 예제 (TOP N, OFFSET, FETCH NEXT) (1) | 2025.01.02 |
SQL_GROUP BY로 피벗테이블처럼 활용하기 (0) | 2020.09.09 |