코딩 개발/ORACLE

ORACLE - GROUP BY HAVING

호소세 2023. 5. 8. 22:35
728x90
반응형

GROUP BY 란?

특정 칼럼을 기준으로 데이터를 그룹화하여 조회할 때 사용합니다.

집계함수와 함께 사용합니다. ( count, max, min, avg, sum,.......)

 

Having 이란?

GROUP BY와 함께 사용하는 조건절입니다.

그룹에 대한 조건을 지정합니다.

 

예시를 볼까요.

데이터베이스 예시를 보여줄 때는 테이블의 속성과 내용을 알아야지 이해가 잘 되더라고요. 그냥 떡하니 sql문만 있으니까 뭘 가져오는 것인지 도저히 모르겠더라고요.(자신에 대한 피드백입니다.) 그래서 저는 이제 내용이 뭐가 있는지도 알려드리려고 노력하겠습니다.

 

예시

테이블 셋팅

CREATE TABLE item(
	id NUMBER PRIMARY KEY,
	name VARCHAR2(100) NOT NULL,
	maker VARCHAR2(100) NOT NULL,
	price NUMBER NOT NULL
)
CREATE SEQUENCE item_seq;

INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'불닭볶음면','삼양',1500);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'진라면','오뚜기',1100);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'테라','하이트진로',1800);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'참이슬후레쉬','하이트진로',1300);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'열라면','오뚜기',1300);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'3분카레','오뚜기',1800);
INSERT INTO item(id,name,maker,price) VALUES(item_seq.nextval,'신라면','농심',1100);
COMMIT

저번에 사용한 테이블입니다.

 

예제 1. maker 별 상품수 조회

SELECT maker,count(*)
FROM item
GROUP BY maker;

maker 별 상품이 몇 개 있는지 count 하는 문장입니다.

 

예제 2. maker 별 상품의 평균가가 1300원이 넘는 maker별 평균가 조회 +  평균가 내림차순 정리

SELECT maker,avg(price) as avg_price
FROM item
GROUP BY maker
HAVING avg(price) > 1300
ORDER BY avg_price DESC;

maker로 표를 묶고 평균가격을 구한 후 1300원보다 큰 maker를 찾은 후 평균가격으로 내림차순 정리한 문장입니다.

 

소감

type별로 묶어서 값을 얻어내는 것도 배웠고, 이 문장들을 이용해서 서브쿼리로 이용할 수 있습니다. 데이터베이스 관련 공부는 약간 루즈할 수 있지만 어떻게 사용되는지 알면 무궁무진하게 데이터를 처리할 수 있습니다.

반응형