인프런 커뮤니티 질문&답변

dmsal0544님의 프로필 이미지
dmsal0544

작성한 질문수

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

SUBQUERY 이해 (업데이트)

예제문제 추가 쿼리 질문

작성

·

71

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;

답변 2

1

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

지금 상황에서는 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님의 프로필 이미지
dmsal0544
질문자

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

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

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

감사합니다!!!

dmsal0544님의 프로필 이미지
dmsal0544

작성한 질문수

질문하기