🙂GROUP BY란?
SQL에서 특정열에 같은 값을 가진 행을 그룹화 시켜주는 명령어이다.
집계함수와 같이 사용하여 그룹단위로 데이터를 집계하는데 유용하다!
🥟대표적인 집계함수
COUNT(컬럼 or *) | 행의 갯수를 반환(*를 사용할 경우 null 까지 count) |
SUM(컬럼) | 행의 값들을 더함(null 제외) |
AVG(컬럼) | 행들의 평균값 (null 제외) |
MAX(컬럼) | 행들의 최대값 (null 제외) |
MIN(컬럼) | 행들의 최소값 (null 제외) |
🥟사용예시
- 예시 테이블
예시 테이블로 서점의 2024년 매출을 관리하는 테이블을 생성하였다.
주의 할 점은 모든 책들은 1권씩 판매되었고 소녀들3만 2권이 판매되었다 !
CREATE TABLE 서점_2024(
id integer PRIMARY KEY,
name varchar2(20),
판매월 integer,
price integer
);
INSERT INTO 서점_2024 VALUES (1,'소년들',1,'5000');
INSERT INTO 서점_2024 VALUES (2,'소년들2',1,'5000');
INSERT INTO 서점_2024 VALUES (3,'소년들3',1,'4000');
INSERT INTO 서점_2024 VALUES (4,'소녀들',2,'4000');
INSERT INTO 서점_2024 VALUES (5,'소녀들2',2,'5000');
INSERT INTO 서점_2024 VALUES (6,'소녀들3',3,'6000');
INSERT INTO 서점_2024 VALUES (7,'소녀들3',3,'6000');
- 월별 매출의 평균을 확인하고 싶다면?
월별 매출을 확인하는 것이기 때문에 GROUP BY로 판매월끼리 묶어주고
값의 평균을 구하는 것이기 때문에 AVG(price)를 SELECT절에 적어주면 된다 !
SELECT 판매월,AVG(price) AS 월별평균
FROM 서점_2024
GROUP BY 판매월;
- 상품(책)별 매출 평균을 확인하고 싶다면?
책의 이름 컬럼인 name으로 GROUP BY를 해주면 확인 가능하다.
SELECT name,AVG(price) AS 매출평균
FROM 서점_2024
GROUP BY name;
- 상품(책)별 판매 개수를 확인하고 싶다면?
avg-> count로 변경(name대신 price를 넣어도 같은 결과 , 또 null값이 없기 때문에 count(*)로 변경해도 같은 결과를 반환함)
SELECT name,count(name) AS 판매개수
FROM 서점_2024
GROUP BY name;
- 상품(책)별,월별 판매 개수를 확인하고 싶다면?
두개이상의 컬럼을 동시에 그룹화하는것도 가능하다!
SELECT 판매월,name,count(name) AS 판매개수
FROM 서점_2024
GROUP BY name,판매월;
🙂HAVING이란?
GROUP BY한 컬럼의 값을 제한하기 위해 사용된다.
WHERE절과 달리 집계함수를 이용하여 값을 제한할 수 있다!
🥟사용예시
- 2개이상 판매된 책을 확인 하고 싶다면?
having절에 집계함수를 사용하여 조건을 줄 수 있다!
SELECT name,count(name) AS 판매개수
FROM 서점_2024
GROUP BY name
HAVING count(name) >= 2;
'📚 DataBase' 카테고리의 다른 글
[ORACLE] 그룹 함수(ROLL UP,CUBE,GROUPING SETS) (0) | 2024.03.11 |
---|---|
[MySQL/ORACLE/MSSQL] DBMS별 결과 값 제한 방법 (0) | 2023.11.15 |
0911 (0) | 2023.09.11 |
[DB] JOIN 정리(INNER/LEFT/RIGHT/OUTER) (0) | 2023.09.08 |
Oracle과 MySQL 뭘 사용해야 할까? (0) | 2023.09.05 |