inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

SUBQUERY 이해 (업데이트)

예제문제 추가 쿼리 질문

203

dmsal0544

작성한 질문수 4

0

안녕하세요 공부하다가 쿼리에 추가해보고 싶은게 생겨서 질문드립니다!

예2: 서브카테코리가 '여성신발'인 상품중 할인가격이 가장 높은 상품의 할인가격 가져오기

이 문제에 정석 답변이라면 MAX(dis_price) 컬럼만 도출될텐데요! 앞에다가 해당 상품명 title을 추가해서 총 두 개의 컬럼이 나오게끔 만들어보려다가 막혀서 질문드립니다.

원래는 99000짜리 하나만 나와야하는데

밑에 쿼리로 하니까 여러개가 나와서요 ㅠㅠ

여러개가 나온 이유는 알거같아요 타이틀을 그룹바이해서 그 그룹별로 제일 높은 가격이 도출된 것 같은데 그건 제가 원하는 답은 아니어서요!

 

맥스 디스 프라이스를 가진 아이템코드의 타이틀을 어떻게 해야 효과적으로 도출할 수 있나요?

SELECT title, MAX(dis_price) FROM items 
JOIN ranking 
on items.item_code = ranking.item_code 
WHERE sub_category = "여성신발" 
group by title;

python sql mysql dbms/rdbms 데이터-엔지니어링

답변 2

1

잔재미코딩 DaveLee

안녕하세요. 답변 도우미입니다.

지금 상황에서는 MAX(dis_price)와 함께 해당 가격을 가진 상품의 title을 가져오고 싶으신데, GROUP BY title을 사용하면 각 title별로 최대 할인가격이 나오기 때문에 여러 개의 결과가 나올 수 있습니다. 이 문제를 해결하려면, 다소 난이도가 급격히 올라갈 수 있습니다. 서브쿼리를 사용해야 하기 때문인데요. 서브쿼리가 워낙 다양하게 사용되기도 해서, 난이도가 중상급으로 올라가거든요. 이 부분은 저희도 다음 고급 SQL 과정 강의로 만들 예정이긴 한데요. (생각은 3년전부터 했는데... 곧 오픈하려고 준비하고 있습니다. ㅎㅎ) 가볍게 다음 부분을 참고해보시면 좋을 것 같습니다.

 

먼저 서브쿼리를 이용하여 '여성신발' 카테고리에서 최대 할인가격을 가진 상품을 찾고, 그 결과를 바탕으로 title을 가져오는 방식으로 접근할 수 있습니다.

예를 들어, 다음과 같은 쿼리를 사용할 수 있습니다:

```sql

SELECT title, dis_price

FROM items

JOIN ranking

ON items.item_code = ranking.item_code

WHERE sub_category = "여성신발"

AND dis_price = (

SELECT MAX(dis_price)

FROM items

JOIN ranking

ON items.item_code = ranking.item_code

WHERE sub_category = "여성신발"

)

```

### 쿼리 설명:

1. 서브쿼리 사용: 서브쿼리에서 '여성신발' 카테고리에서 최대 할인가격 (`MAX(dis_price)`)을 먼저 찾습니다.

2. 메인 쿼리: 메인 쿼리에서는 서브쿼리에서 찾은 최대 할인가격과 동일한 가격을 가진 상품의 titledis_price를 가져옵니다.

이렇게 하면 최대 할인가격을 가진 상품의 titledis_price가 한 개의 행으로 출력됩니다.

만약 최대 할인가격을 가진 상품이 여러 개 있다면, 그 상품들의 titledis_price가 모두 출력됩니다. 단 하나의 결과만 원한다면, LIMIT 1을 추가하여 첫 번째 결과만 출력하도록 할 수도 있습니다:

```sql

SELECT title, dis_price

FROM items

JOIN ranking

ON items.item_code = ranking.item_code

WHERE sub_category = "여성신발"

AND dis_price = (

SELECT MAX(dis_price)

FROM items

JOIN ranking

ON items.item_code = ranking.item_code

WHERE sub_category = "여성신발"

)

LIMIT 1;

```

이렇게 하면 최대 할인가격을 가진 상품 중 하나의 결과만 나오게 됩니다.

감사합니다.

잔재미코딩 드림

0

dmsal0544

와 깔끔하게 이해되었습니다..!

개강한다면 꼭 들어보고 싶어요!

예제가 많았으면 좋겠습니다!!

감사합니다!!!

실습을 따라하는데 데이터베이스가 보이지 않아요

0

49

1

섹션1 4강부터 강의 실행 안됨 이슈

0

75

1

강의 자료 다운로드 관

0

88

1

강의 영상이 안나와요..

0

78

1

섹션4 화면 자체가 안나와요

0

116

1

강의 화면이 안 보이고, 목소리밖에 안나와요 ;;

0

114

1

데이터 삭제 질문

0

120

1

mysql 설치가 되지 않습니다.

0

1377

3

강의 결과 질문 - SQLD, 데이터베이스 설계, 프로젝트 구축 하여 취업

0

144

1

지마켓 파일 불러왔는데, 테이블이 생성이 안됩니다

0

117

1

실습 코드 깃허브 업로드

0

143

1

sql_safe_updates 옵션

0

152

1

sql 설치 문제

0

1419

2

서브쿼리를 JOIN으로 바꾸기

0

153

1

중고급 SQL과 실전 데이터 문의

1

154

1

(맥환경) workbench 이용할 때 패스워드 입력 안해도 자동으로 활성화 가능해져요..

0

348

1

강의 커리큘럼 질문 있습니다.

0

175

1

강의 자료 이미지가 보이지 않습니다.

0

160

1

Join 구문에서 메인 테이블

0

175

1

강의 화면 출력이 되지 않는 현상

0

208

1

파이썬으로 다루는 MySQL

0

205

1

JOIN 활용 SQL 연습문제

0

177

1

Dbeaver 라는 SQL 쿼리 실행 툴을 써도 될까요?

0

302

1

Sakila PDF 파일 오류

0

186

1