24.08.13 00:14 작성
·
62
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
2024. 08. 14. 10:05
안녕하세요. 답변 도우미입니다.
지금 상황에서는 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. 메인 쿼리: 메인 쿼리에서는 서브쿼리에서 찾은 최대 할인가격과 동일한 가격을 가진 상품의 title
과 dis_price
를 가져옵니다.
이렇게 하면 최대 할인가격을 가진 상품의 title
과 dis_price
가 한 개의 행으로 출력됩니다.
만약 최대 할인가격을 가진 상품이 여러 개 있다면, 그 상품들의 title
과 dis_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