[개발] - 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
반응형