반응형

 

오늘은 Mysql || MariaDB group by & having (개념) (사용 이유) (문법 예시) 시작하겠습니다.

 

Group by

 

개념


SQL의 많은 장점 중 GROUP BY는 가장 유용하고 자주 사용하게 되는 구문 중 하나이며, 데이터의 양이 많아지고 컬럼이 늘어날수록 필수적으로 사용해야만 하는 구문입니다.

 특정열이나 특정 열을 연산한 결과를 집계 키로 정의하여 그 집계 키의 Unique 값에 따라 그룹을 짓는 연산자라고 정의 할 수가 있다. 사용방법은 select 절의 가장 마지막 라인에 Group by라는 절을 쓰고 칼럼 및 연산식을 지정하면 된다. 하나 이상이면 , (콤마)를 이용하여 구분할 수도 있다. 앞서 이야기했듯이 집계 키로 정의된 특정 열이나 특정 열을 연산한 결과 값이나 동일한 집계 키 즉, 동일한 값이면 오직 한번(Unique)만 나타난다.

여기서 잠깐!

Group by Distinct 차이점

Group by : Unique 집계 연산 (Count(*), SUM(), AVG(), MAX(), MIN())

Distinct : Unique 집계

 

Unique 집계 연산

Unique 집계 연산

Unique 집계 연산

3 강조

 

 

그룹 함수 종류


함수명

기능

사용

 COUNT

 행의 수를 계산한다. 

 COUNT(컬럼 | *) 

 MAX

 값들 중에 최대 값을 반환한다. 

 MAX(컬럼) 

 MIN

 값들 중에 최소 값을 반환한다. 

 MIN(컬럼) 

 AVG

 평균 값을 계산한다. 

 AVG(컬럼) 

 SUM

 총 합계를 계산한다. 

 SUM(컬럼)

 VARIANCE

 분산을 계산한다. 

 VARIANCE(컬럼) 

 STDDEV

 표준편차를 계산한다. 

 STDDEV(컬럼) 

 

사용 이유


위에 개념에서도 말했다시피 데이터의 양이 많아지고 컬럼이 늘어날수록 필수적으로 사용해야만 하는 구문

이라고 합니다.

그대로 뭔가 집계하고 연산할 데이터가 필요하면 사용하면

 

문법 예시


SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names

먼저 예시로 사용할 테이블 및 데이터 하나 만들겠습니다.

create table expenditure(

id varchar(64),
timestamp timestamp,
money int,
primary key(id,timestamp)

);

insert into expenditure values('gildong','2019-10-19',100000);
insert into expenditure values('gildong','2019-10-20',70000);
insert into expenditure values('gildong','2019-10-21',3000);
insert into expenditure values('gildong','2019-10-22',7700);
insert into expenditure values('gildong','2019-10-23',50100);
insert into expenditure values('samsam','2019-10-19',50000);
insert into expenditure values('samsam','2019-10-20',60000);
insert into expenditure values('samsam','2019-10-21',90000);
insert into expenditure values('samsam','2019-10-22',1110000);
insert into expenditure values('samsam','2019-10-23',31000);
insert into expenditure values('YUMDDA','2019-10-19',11200000);
insert into expenditure values('YUMDDA','2019-10-20',122300000);
insert into expenditure values('YUMDDA','2019-10-21',10330000);
insert into expenditure values('YUMDDA','2019-10-22',3541100);
insert into expenditure values('YUMDDA','2019-10-23',10000000);

사용자별 지출내역이 들어있는 초간단 예시 테이블을 만들었습니다.

상황 1.지출내역 테이블에서 날짜별 총 합산 금액과 평균 금액,최소,최고 금액을 구하시오.

select timestamp,sum(money),avg(money),min(money),max(money) from expenditure group by timestamp;

 

결과

 

HAVING

 

개념


HAVING은 간단하게 생각해서 GROUP BY 한 결과에 조건을 붙이고 싶을 때, 즉 GROUP BY의 WHERE 절과도 같다고 볼 수 있습니다.

 

사용 이유


GROUP BY조건을 걸고싶을때.

 

문법 예시


SELECT column-names
FROM table-name
WHERE condition
GROUP BY column-names
HAVING condition

 

상황 2.지출내역 테이블에서 지출날짜 합계 지출이 5천만원이상인 날짜만 구하시오.

select timestamp,sum(money),avg(money),min(money),max(money) 
from expenditure
group by timestamp 
HAVING sum(money) > 50000000;

 

결과

 

예제 파일 제공


[MariaDB] group by & having.sql
0.00MB

반응형

+ Recent posts