일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- start.spring.io
- 스프링
- 내장객체
- 싱글턴
- suvlet
- 자동형변환
- 메소드
- 콜렉션
- Short
- 컬렉션
- 인텔리제이
- 루프
- 박싱
- 클래스
- Java
- Jenkins
- boxing
- maven
- bootstrap
- 제네릭
- 무한
- dependency
- unboxing
- wrapper
- 언박싱
- 빌드
- https://start.spring.io
- 싱글톤
- Scanner
- 제너릭
Archives
- Today
- Total
Developer Gonie
[6주차] 20. having 사용법(조건으로 그룹함수를 필요로 하는 경우)*** 본문
K-DigitalTraining 강의/2. Oracle + PLSQL
[6주차] 20. having 사용법(조건으로 그룹함수를 필요로 하는 경우)***
이대곤 2022. 6. 15. 09:32* where, having 모두 조건을 걸어 필터링 하기위해 사용되는데, 그룹함수는 having 조건에서만 사용이 가능하기 때문에
그룹함수의 사용이 필요한 경우 having 절을 사용하면 된다. 그리고 having 은 where 절의 기능을 포함하고 있기 때문에
where 에 있는 조건들을 가져와서 having에서 그대로 사용해도 똑같이 정상적인 결과가 나오는 것을 알 수 있기도 하다.
having을 사용해야 하는 경우(간단예시)
select publisher, avg(price)
from book where avg(price) > 2000
group by publisher
1행에 오류:
ORA-00934: 그룹 함수는 허가되지 않습니다
-- 출판사별 price 평균을 구한 뒤에 나온 결과에서 그 price 평균이 2000 이상인 라인만 추출하는 것
select publisher, avg(price)
from book
group by publisher
having avg(price) > 2000;
(실전1) having이 필요한 경우
Q. 출판사별 판매중인 price 평균을 구하고, 전체 평균보다 높은 출판사와 그 출판사의 price 평균을 가져오시오.
--1. publisher별 판매중인 책의 가격 평균
select publisher, avg(price)
from book
group by publisher;
PUBLISHER AVG(PRICE)
---------------------------------------- ----------
문학동네 2333.33333
문학과 지성 2000
창작과 비평 1500
--2. price 필드값 전체의 평균
select avg(price) from book;
AVG(PRICE)
----------
2000
--3. "1. + 2." 출판사별 판매중인 price 평균을 구하고 전체 평균보다 높은 출판사와 그 출판사의 price 평균을 가져온 것.
select publisher, avg(price)
from book
group by publisher
having avg(price) > (select avg(price) from book);
PUBLISHER AVG(PRICE)
---------------------------------------- ----------
문학동네 2333.33333
(실전2) where + having이 필요한 경우
Q. 90년대에 출판된 도서에 한해서 출판사별 모든 책의 price의 평균을 구하고,
그 중에서 모든 책의 price 평균 보다 같거나 높은 출판사와 그 출판사의 가격평균을 가져오시오.
--90년대에 출판된 도서에 한해서 출판사별 모든 책의 price의 평균을 구하고
그 중에서 모든 책의 price 평균 보다 같거나 높은 출판사와 그 출판사의 가격평균 조회하기
select publisher, avg(price)
from book
where day like '9%'
group by publisher
having avg(price) >= (select avg(price) from book);
주의, Having이 필요한거 같지만 그렇지 않은 경우
* 아래의 문제를 해결하고자 할 때 having price >= avg(price) 을 쓰려고 했으나,
group by 를 사용하지 않은 상태에서는 having 의 사용이 불가했다.
따라서 다음과 같이 해결해야 한다.
-- 전체 가격 평균이상인 레코드의 수는?
select count(*)
from albums
where price >= (select avg(price) from albums); -- 가격평균은 숫자 평균으로 치환된다.
'K-DigitalTraining 강의 > 2. Oracle + PLSQL' 카테고리의 다른 글
[6주차] 22. 교집합 조인 (inner 조인 = natural 조인)*** (0) | 2022.06.15 |
---|---|
[6주차] 21. where, group by, having, order by 전부 사용시 입력순서* (0) | 2022.06.15 |
[6주차] 19. group by 사용법(그룹함수와 같이 조회되는 일반 컬럼이 존재하는 경우)*** (0) | 2022.06.14 |
[6주차] 18.눈에 보이지 않지만 자동으로 생성되는 테이블 및 이들의 용도 (0) | 2022.06.14 |
[6주차] 17. 쿼리문 사용시 사용할 수 있는 주요함수(그룹함수 + 기타)*** (0) | 2022.06.14 |
Comments