본문 바로가기
Kosta DevOps 과정 280기/Java

데이터 베이스 having

by 롯슈83 2024. 6. 12.

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