코드 그라데이션
DAY03-2. GROUP BY, HAVING, 집계 함수, ROLLUP 본문
GROUP BY
- 그룹으로 묶어주는 역할
- 집계 함수는 주로 GROUP BY절과 함께 데이터를 그룹화 해주는 기능을 한다.
문제 1
- userID를 기준으로 amount를 합친다(모은다) 기준을 잡는 역할이라고 생각하면 편리하다.
답안
SELECT userID AS '사용자 아이디' , sum(amount) AS '총 구매 개수' from buytbl GROUP BY userID;
문제 2
답안
SELECT * FROM buytbl;
SELECT userID AS '사용자 아이디', sum(price*amount) AS '총 구매액' from buytbl GROUP BY userID;
집계 함수
함수명 | 설명 |
AVG() | 평균 구하기 |
MIN() | 최솟값 구하기 |
MAX() | 최댓값 구하기 |
COUNT() | 행의 개수 세기 |
COUNT(DISTINCT) | 행의 개수 세기(중복 1개만 허용) |
STDEV() | 표준편차 구하기 |
VAR_SAMP() | 분산 구하 |
문제 3
답안
SELECT * FROM buytbl;
SELECT userID, avg(amount) AS '평균 구매 개수' from buytbl GROUP BY userID;
문제 4
답안
SELECT avg(amount) AS '평균 구매 개수' FROM buytbl;
문제 5
답안
SELECT name, height FROM usertbl
WHERE height = (SELECT MAX(height) from usertbl)
OR height = (SELECT MIN(height) from usertbl);
문제 6
답안
SELECT count(mobile1) AS '휴대폰이 있는 사용자' from usertbl;
-- 또는
SELECT count(*) AS '휴대폰이 있는 사용자' from usertbl where mobile1 is not null;
HAVING 절
- 집계 함수는 WHERE 절에 나타날 수 없다.
- 이 때 사용하는 것이 HAVING 절.
- HAVING 절은 WHERE와 비슷한 개념으로, 조건을 제한하는 것이지만 집계 함수에 대해서 조건을 제한하는 것.
- HAVING 절은 꼭 GROUP BY 다음에 나와야 한다. 순서 필히 준수!!
문제 7
답안
SELECT userID AS '사용자', sum(price*amount) AS '총 구매액' from buytbl GROUP BY userID
HAVING sum(price*amount) >= 1210
ORDER BY SUM(price*amount) desc;
ROLLUP
- 총합 또는 중간 합계가 필요할 때, GROUP BY 절과 함께 WITH ROLLUP 구문을 사용하면 된다.
실행 결과
728x90
'Java > 알고리즘' 카테고리의 다른 글
[Lv.0] 홀짝 구분하기 (0) | 2023.06.19 |
---|---|
[Lv.0] 최댓값 구하기 (1) (0) | 2023.06.18 |
[Lv.0] 부분 문자열인지 확인하기 (0) | 2023.06.16 |
[Lv.0] 문자열 안에 문자열 (0) | 2023.06.15 |
[Lv.0] A 강조하기 (0) | 2023.06.14 |
Comments