20220214_SQL 기초 4 (GROUP BY와 집계함수)

2022. 2. 17.공부/SQL, R

728x90

ORDER BY는 데이터를 오름차순, 내림차순으로 조회해주긴 하지만 컬럼명으로 데이터가 그룹핑되어 데이터가 뽑혀나오지는 않는다. 예를 들어 id와 구매 갯수 데이터가 구매 시점별로 적재되어있는 테이블에서 데이터를 조회한다면, 같은 id일지라도 각각 별도의 저장 공간에 데이터가 적재되어 아래의 [전]과 같은 모습을 볼 수 있다. 이는 ORDER BY를 사용하더라도 동일하며, id가 같은 데이터를 그룹핑해주고 싶다면 함수와 함께 GROUP BY라는 키워드를 별도로 사용한다. 

 

 

[전] CJH,1 값을 가진 row가 2번 적재되었다.
[후] sum()함수와 group by 키워드를 이용하여 개선, user_id로 그룹핑

 

GROUP BY는 같은 데이터를 하나의 그룹으로 묶어준다. GROUP BY는 컬럼을 인자로 한 집계 함수와 함께 사용하며, 자주 쓰이는 집계 함수는 다음과 같다.

 

AVG() 평균
MIN() 최소값
MAX() 최대값
COUNT() 결과의 row 개수
COUNT(DISTINCT) 결과의 종류 개수
STDEV() 표준편차
VAR_SAMP() 분산

 

GROUP BY를 사용할 때의 GROUP BY 뒤에 오는 조건절은 WHERE이 아닌 HAVING으로 처리하게 된다. GROUP BY를 사용할 때 SELECT 뒤에 오는 집계 함수는 alias를 정해주어 컬럼명을 작성해주는 것이 좋다.

 

SELECT user_id, sum(price*amount) as '총구매액' FROM buyTbl GROUP BY user_id WHERE 250000 < sum(price*amount);
// GROUP BY 뒤에 WHERE로 조건 걸면 코드 실행이 되지 않음
SELECT user_id, sum(price*amount) as '총구매액' FROM buyTbl GROUP BY user_id HAVING 250000 < sum(price*amount);
// GROUP BY 뒤에 WHERE 대신 HAVING으로 조건 걸어 코드 개선