코드 그라데이션

DAY03-2. GROUP BY, HAVING, 집계 함수, ROLLUP 본문

Java/알고리즘

DAY03-2. GROUP BY, HAVING, 집계 함수, ROLLUP

완벽한 장면 2023. 6. 17. 08:19

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