SELECT 문(2)
GROUP BY, HAVING, 집계 함수
GROUP BY
결과를 그룹으로 묶어줌
[ WITH <common_table_expression>]
SELECT select_list[ INTO new_table]
[ FROM table_source]
[ WHERE search_condition]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression[ ASC | DESC ]]
SELECT userid AS [사용자아이디],
SUM(amount) AS [총구매개수]
FROM buyTblGROUP BY userid
SUM() 외의 자주 사용되는 집계 함수
정보
집계 함수를 잘 활용하면 일반 SQL 문보다 빠른 성능을 얻을 수 있다 함수 성능 측정시
SELECT * FROM tbl
보다
SELECT COUNT(*) FROM tbl
의 성능이 월등이 좋다
함수명 | 설명 |
---|---|
AVG() | 주어진 값들의 평균을 계산 |
MIN() | 주어진 값들 중 최소값을 반환 |
MAX() | 주어진 값들 중 최대값을 반환 |
COUNT() | NULL 값을 제외한 행의 개수를 반환 |
COUNT_BIG() | NULL 값을 제외한 행의 개수를 반환하며, 반환 타입이 BIGINT |
STDEV() | 주어진 값들의 표준 편차를 계산 |
SELECT AVG(amount) AS [평균구매개수] FROM buyTbl
SELECT userid, AVG(amount*1.0) AS [평균구매개수]
FROM buyTblGROUP BY userid
SELECT Name, height FROM userTbl
WHERE height = (SELECT MAX(height)FROM userTbl)
OR height = (SELECT MIN(height)FROM userTbl)
HAVING 절
위험
집계 함수의 조건을 잘못 사용하는 경우
WHERE 절 사용
SELECT useridAS [사용자], SUM(price*amount)
FROM buyTbl
WHERE SUM(price*amount) > 1000
GROUP BY userid
정보
GROUP BY 사용 시 조건의 검색은
GROUP BY 이후 HAVING 절을 사용한다
SELECT useridAS [사용자], SUM(price*amount)
FROM buyTbl
GROUP BY userid
HAVING SUM(price*amount) > 1000
ROLLUP() / GROUPING_ID() / CUBE() 함수
ROLLUP()
총합 또는 중간합계가 필요한 경우
SELECT num, groupName, SUM(price * amount) AS [비용]
FROM buyTblGROUP
BY ROLLUP(groupName, num)
GROUPING_ID()
한눈에 데이터인지 합계인지 파악
SELECT groupName, SUM(price * amount) AS [비용],
GROUPING_ID(groupName) AS [추가행여부]
FROM buyTbl
GROUP BY ROLLUP(groupName) ;
CUBE()
다차원 정보의 데이터를 요약
SELECT prodName, color, SUM(amount) AS [수량합계]
FROM cubeTbl
GROUP BY CUBE(color, prodName);