실습문제 9-10 질문
319
작성한 질문수 4
안녕하세요
강의 문제 관련하여 추가 질문 있어서 남깁니다.
문제 10번은 카테고리 아이디 별로 기준을 주어 각각 소비재, 사치재, etc 로 분류를 하였는데요,
여기서 더 나아가서, 각각의 분류 대로 products 개수를 출력하고 싶습니다. (ex. 소비재 - 3개, 사치재 - 4개)
그렇게 되었을 때 생각한 쿼리는 아래와 같은데요,
select case when categoryID <= 3 then '소비재'
when categoryID between 4 and 5 then '사치재'
else 'etc' end as '분류',
count(distinct '분류') as '분류별 개수'
from products
;
위와 같은 쿼리 작성 시, 소비재 1개만 나오는 불완전한 결과가 출력됩니다.
해당 쿼리 작성문 궁금합니다.
감사합니다.
답변 1
0
안녕하세요 현우님
쿼리로 나온 결과 데이터를 재가공하고 싶으신 것으로 이해했는데요,
이 경우 서브쿼리를 사용해주시면 됩니다.
서브쿼리는 select.. 으로 나온 결과를 마치 하나의 테이블처럼 사용할 수 있게해주는 건데요, 이 경우 실제로 존재하는 원본데이터는 아니기 때문에 '뷰'라고 부르게 됩니다. 사용법은 from 뒤에 ()로 작성하는 select쿼리를 감싸주시고 () 뒤에 별칭으로 사용할 이름을 적어주시면 됩니다.
쿼리로 먼저 한번 보실까요 사용 예시는 아래와 같아요
---
select cat, count(distinct ProductID) as cnt
from
(
select ProductID, case when categoryID <= 3 then '소비재'
when categoryID between 4 and 5 then '사치재'
else 'etc' end as cat
from products
) a
group by cat
;(코드 에디터가 있군요..?)
--
이렇게 쿼리를 돌리면 아래와 같은 결과가 나올거에요

서브쿼리는 이 처럼 사용할 수 있으며 무한히 중첩이 가능해요. 다만 말씀드린대로 원본 데이터를 사용하는 것이 아니기 때문에 너무 많이 중첩하게될 경우 db서버에 부하를 주어 실행속도가 느려질 수 있으니 실제 디비에서는 조심해야겠죠.
실행순서는 가장 안쪽에 있는 from 절부터 수행되어 바깥에 있는 쿼리들을 수행해 나가는 흐름입니다. 추가로 질문 더 있으시면 알려주세요!
신규 쿼리 공간 오류 문의
0
48
1
cross join 문의
0
51
1
실습 문제 20번) 구문 작성 오류 관련 문의사항
0
61
1
에러가 발생합니다.
0
121
1
쿼리 실습링크
0
116
1
3중,4중 조인 질문
0
152
1
강의자료 및 슬랙
0
310
1
실습 시 에러. 강의와 똑같이 써도 에러나요.
1
607
2
리밋 입력 시 에러
0
605
2
쿼리 작성시 작은 따옴표와 큰 따옴표
0
5521
2
SQLD 자격증 관련 질문
0
481
1
PK 컬럼에 대한 DISTINCT 적용
0
672
1
질문드리겠습니다.
0
369
1
질문드리겠습니다.
0
414
1
질문드리겠습니다.
0
393
1
질문드립니다.
0
386
1
count(distinct) 구문 오류 질문드립니다.
0
860
1
group by
1
559
1
cross <-> inner join 문의
1
287
1
실습문제 3-4(functions) 질문
1
253
1
select 절 함수 문의
1
299
1
제가 작성한 쿼리문도 맞게 쓴걸까요?
1
348
2
select절에서 함수 사용할 때 질문이 있습니다.
1
306
2
as로 컬럼명을 설정한 내용을 하위 코드에서 사용할 수 없는건가요?
1
267
3





