inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개념반]배워서 바로 쓰는 SQL 쿼리

실습 문제 9-10 (Functions)

실습문제 9-10 질문

319

김현우

작성한 질문수 4

1

안녕하세요

강의 문제 관련하여 추가 질문 있어서 남깁니다.

문제 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개만 나오는 불완전한 결과가 출력됩니다.

해당 쿼리 작성문 궁금합니다.

감사합니다.

sql

답변 1

0

Joe (브리쳐스)

안녕하세요 현우님

쿼리로 나온 결과 데이터를 재가공하고 싶으신 것으로 이해했는데요,

이 경우 서브쿼리를 사용해주시면 됩니다.

서브쿼리는 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
    ;

(코드 에디터가 있군요..?)

--

이렇게 쿼리를 돌리면 아래와 같은 결과가 나올거에요

image

서브쿼리는 이 처럼 사용할 수 있으며 무한히 중첩이 가능해요. 다만 말씀드린대로 원본 데이터를 사용하는 것이 아니기 때문에 너무 많이 중첩하게될 경우 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