[Mysql || MariaDB] group by & having
오늘은 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' 카테고리의 다른 글
[MySQL || MariaDB] 자주 쓰는 날짜 API와 날짜 실전 예제 총 정리 (1) | 2019.11.12 |
---|---|
[MySQL || MariaDB] 서브쿼리(Subquery) 총 정리 (1) | 2019.11.12 |
[MySQL || MariaDB] AUTO_INCREMENT 옵션 총 정리 (3) | 2019.11.10 |
[Mysql || MariaDB] JOIN 총 정리 (0) | 2019.11.10 |
[Mysql || MariaDB] Select 문 한번에 여러 개 Count()카운트 조회 (0) | 2019.10.31 |