강원도지사
select * from customer;
select * from book;
select * from orders;



--Q1. 도서 전체의 원가 합계는?

SELECT sum(price)
from book;





--group by(그룹명) : 집계함수를 쓰긴 쓸건데 소그룹 별로 집계를 내고 싶을 때 사용
--문법 : group by 속성명

--Q2. 출판사별(그룹핑), 도서 원가 합계(집계함수)

select publisher , sum(price)
from book
group by publisher;


--문제에 나온 정보들이 모두 들어가는 테이블을 찾는다.
--중요한 규칙! select 절 뒤에는 반드시 그룹화한 속성 + 집계함수가 와야한다.

--group by 뒤에 있는 속성은 select절에도 있어야한다.

-Q3. 고객별로 주문한 도서의 수량을 구하시오

select custid 고객번호 , count(Bookid)도서수량
from orders
group by custid;


--custid와 고객번호 사이/count(bookid)와 도서 수량 사이에 as생략됨 

--Q4. 고객별로 주문한 도서의 수량과 총 구매액을 구하시오

select custid , count(Bookid), sum(saleprice)
from orders
group by custid;




--select 뒤에 오는 문법 순서정리(꼭 잘 지키기, 숫자 적은건 컴파일할때 순서, 위에서 아래로는 코드 쓸때 순서)
--5. select(필수)
--1. from(필수)
--2. where (선택),테이블 쪼개기
--3. group by (선택),쪼갠걸 다시 그룹화 하기
--4. having(선택), 그룹바이를 필터링
--6. order by(선택), 출력한 결과에 의해서 오더바이

--having : 그룹화 하긴 했는데, 그룹화 한 것을 전부 출력하지 않고 그룹에 대해서 조건을 걸 때 사용

--Q5.고객별로 주문한 도서의 수량을 구하시오(단, 그룹화 한 것에서 3권 이상 주문한 고객만 출력

select custid 고객번호 , count(Bookid)도서수량
from orders
group by custid
having count(bookid) >=3;



--where, having 차이점
--where : 초반에 테이블 전체에 대한 조건
--having : 그룹화 한 것에 대한 조건

--Q. 판매 금액이 만원 이상인 도서에 한해서, 고객별로 주문한 도서의 수량을 구할껀데, 2건 이상을 사간 고객을 구하시오

--풀이 첫번째(판매 금액이 만원 이상인 도서에 한해서)

select *
from orders
where saleprice >= 10000;


--풀이 두번째(판매 금액이 만원 이상인 도서에 한해서, 고객별로 주문한 도서의 수량을 구할껀데)

select custid, count(bookid)
from orders
where saleprice >= 10000
group by custid;



--풀이 세번째(판매 금액이 만원 이상인 도서에 한해서, 고객별로 주문한 도서의 수량을 구할껀데 2건 이상을 사간 고객을 구하시오)

select custid, count(bookid)
from orders
where saleprice >= 10000
group by custid
having count (bookid) >= 2;




--Q6. 책 이름에 '축구'or'피겨'or'골프'or'야구'가 들어간 책들의 출판사 별 책 원가의 평균을 출력하시오. 
--단 평균이 7000원 이상인 출판사만 출력하시오 + 평균가격이 높은 순으로 출력하시오)

select publisher, avg(price)
from book
where bookname like '%축구%' or bookname like '%피겨%' or bookname like '%골프%' or bookname like '%야구%'
group by publisher
having avg(price)>= 7000
order by avg(price) desc;

 

--문자는 like를 적는다

 

요약

1) group by(그룹명) : 집계함수를 쓰고 소그룹 별로 집계를 내고 싶을 때 사용
--문법 : group by 속성명

2) having :group by로 그룹화 한 것을 전부 출력하지 않고 그룹에 대해서 조건을 걸 때 사용

profile

강원도지사

@박강원입니다

노력하여 끊임없이 발전하는 사람이 되겠습니다!