데이터를 검색할 때 공통 그룹 의 정보를 확인해야 할 때가 있다
데이터를 그룹화 할때는 GROUP BY 문을 사용
데이터를 필터링 할 때는 HAVING 문을 사용
SELECT [열] FROM [테이블] WHERE [열] = [조건문] GROUP BY [열] HAVING [열] = [조건문]
1) GROUP BY : 데이터를 그룹화하는 구문
2) [열] : 기룹화 기준의 열 이름을 지정. 1개이상 그룹화 할 수 있음
3) [HAVING] : WHERE와 비슷한 기능을 하며 그룹화된 결과의 필터링 기능을 함
4) [조건값] : HAVING 필터에 적용할 조건값을 입력한다.
SELECT sector FROM nasdaq_company
GROUP BY sector
SELECT industry FROM nasdaq_company
GROUP BY industry
====================================================================
영업 부장
영업 대리
개발 부장
개발 사원
회계 사원
중복 되어도 다른 값은 각각 다 나오고
두개가 같은게 여러개 있으면 그 여러개만 한개로 나오고
그럼 데이터베이스 입장에선 무슨 영업부장의 연봉? 여러명이잖아
SUM, COUNT, AVG 등등을 쓰는거야
이렇게 하면 오류 :
SELECT 직급, 부서, 연봉 FROM 테이블
GROUP BY 직급, 부서
SELECT sector, industry FROM nasdaq_company
GROUP BY sector, industry
SELECT sector, industry FROM nasdaq_company
GROUP BY industry, sector
====================================================================
각 그룹에 몇 개의 행이 있는지 세어 보는 쿼리
SELECT sector, COUNT(*) AS cnt FROM nasdaq_company
GROUP BY sector
SELECT sector, industry, COUNT(*) AS cnt FROM nasdaq_company
GROUP BY sector, industry
ORDER BY sector, industry
====================================================================
SELECT sector, industry FROM nasdaq_company
GROUP BY sector, industry
HAVING industry = 'Advertising'
SELECT sector, COUNT(*) AS cnt FROM nasdaq_company
GROUP BY sector
HAVING COUNT(*) > 1000
SELECT sector, COUNT(*) AS cnt FROM nasdaq_company
GROUP BY sector
HAVING industry = 'Advertising'
SELECT sector, industry, COUNT(*) AS cnt FROM nasdaq_company
GROUP BY sector, industry
HAVING industry = 'Advertising'
and COUNT(*) > 10
DISTINCT문은 지정한 열의 중복 데이터를 제거한다
SELECT DISTINCT sector, industry
FROM nasdaq_company
GROUP BY 문으로 얻은 결과와 같다
결과가 같다고 해서 GROUP BY 문과 DISTINCT 문이 같지는 않다.
DISTINCT문은 중복을 제거할 뿐이지 집계하거나 계산을 할 수는 없다
집계나 계산이 필요하다면 GROUP BY문을 사용
SELECT
ipo_year, COUNT(*) AS cnt
FROM nasdaq_company
GROUP BY ipo_year, sector
HAVING COUNT(*) >= 20
ORDER BY cnt DESC
SELECT ipo_year, sector, COUNT(*) AS cnt
FROM nasdaq_company
GROUP BY ipo_year, sector
HAVING COUNT(symbol) symbol > 20
ORDER BY cnt DESC
symbol이 ipo_year와 연관이 있음
퀴즈 9 : nasdaq_company 테이블에서 IPO 연도별로 등록된 symbol 개수가 20개이상인 sector 목록을 내림차순(symbol 개수가 많은순서)으로 출력하세요
SQL
출력 테이블설정 조건절
출력
~별
~(으)로
테이블설정
조건절
~인
~한
~을 가진