having
- Group by 의 결과에 또 다시 조건을 걸고 싶을 때, having을 사용한다.
- where는 처음의 조건
- 만약 처음 집계에서 만약 판매 건수가 2개 이상인 것만 조회하고 싶을 때 사용한다.
- group by 절에 나타난 결과에 대하여 조건식을 주고자 할 때 사용한다.
- 예시 코드
- '대한미디어'나 '이상미디어'의 도서명별로 판매 건수를 출력한다. 단, 판매 건수가 2건 이상인 것만 출력하고 판매 건수가 높은 순으로 출력
select bookname, count(*) count
from book b, orders o
where b.bookid = o.bookid and
publisher in ('대한미디어', '이상미디어')
group by bookname
having count(*) >= 2
order by count(*) desc;
- 데이터 조회하기 정리
select 컬럼(들)
from 테이블이름(들)
[where 조건식 ]
[group by 컬럼(들)]
[having 조건식]
[order by 컬럼(들)]
예제 문제
- 고객명 별로 구매 건수와 총 구매금액을 출력하시오. 단, 총 구매 금액이 10000원 이상인 고객만 출력하고 총 구매 금액이 높은 순으로 출력한다.
select name, count(*) count, sum(saleprice) price
from orders o, customer c
where o.custid = c.custid
group by name
having sum(saleprice) >= 10000
order by sum(saleprice) desc;
- '판교'나 '종각'에 근무하는 직원들의 부서명 별로 근무하는 직원의 수, 총 급여액, 평균 급여액을 출력하라.
단, 직원의 수가 2명 이상인 부서만 출력하고 총 급여액이 높은 순으로 출력한다.
총 급여액이 동일할 때에는 평균급여액 순으로 출력한다.
select dname, count(*) count, sum(salary) totalSalary, avg(salary) avg
from emp e, dept d
where e.dno = d.dno and
dloc in ('판교', '종각')
group by dname
having count(*) >= 2
order by sum(salary) desc, avg(salary);
- '축구' 관련 도서에 대하여 도서명 별로 판매 건수를 출력한다. 단, 판매 건수가 높은 순으로 출력한다.
select bookname, count(*) count
from orders o, book b
where o.bookid = b.bookid and
bookname like '%축구%'
group by bookname
order by count(*) desc;
'Kosta DevOps 과정 280기 > Java' 카테고리의 다른 글
3개 이상 테이블 Outer join 하기 (2) | 2024.06.17 |
---|---|
셀프 조인 (0) | 2024.06.12 |
DB 복습 (0) | 2024.06.12 |
집계함수 (0) | 2024.06.11 |
DB 실습-1 (0) | 2024.06.11 |