[MySql] 쿼리 정렬 질문이요! ( 2개 필드 중 값이 낮은 순으로 정렬! ) 0 5 2,121

by 쿼리냠냠 [SQL Query] mysql sql 쿼리 [2019.09.19 16:27:41]


구루비 회원님들 안녕하세요. 
쿼리조회를 하다 원하는 값이 안나와 질문드립니다.
도와주세요!!!

제가 원하는 쿼리는 다음과같습니다.

1. price 값과 salePrice값 중 제일 낮은 순을 정렬
   ==> 총10개의 값을 낮은순으로 정렬하고싶습니다.

 

id name price salePrice
1 고구마 1000  
2 감자 2000  
3 사과 3000 3000
4 바나나 4000 900
5 수박 5000 2500



제가 구현한쿼리는 다음과 같습니다.
SELECT * FROM priceTable ORDER BY salePrice IS NULL ASC, salePrice ASC, price ASC;

결과값

id name price salePrice
4 바나나 4000 900
5 수박 5000 2500
3 사과 3000 3000
1 고구마 1000  
2 감자 2000  



*원하는 결과값*

id name price salePrice
4 바나나 4000 900
1 고구마 1000  
2 감자 2000  
5 수박 5000 2500
3 사과 3000 3000

 


어떻게해야 두개의 필드를 합쳐서 정렬을 할 수 있을까요?

감사합니다. 좋은 하루보내세요!

by DarkBee [2019.09.19 16:47:01]
ORDER BY LEAST(IFNULL(price, sale_price),IFNULL(sale_price, price) )

 


by 쿼리냠냠 [2019.09.19 17:31:09]

답변 감사합니다.

IFNULL이란걸 처음봐서(죄송ㅠ)  검색을 해봤는데요.
IFNULL을 사용할 때 주의할점이 있나요? 
다른 블로거글들을 봤을땐 where 절 같은데에다 사용하면 퍼포먼스가 안좋아진다는 글도있는 것 같아서요.
ORDER BY는 영향이 크게 없을까요?
 


by 마농 [2019.09.19 16:48:32]
 ORDER BY IFNULL(salePrice, price)

 


by 쿼리냠냠 [2019.09.19 17:31:21]

답변 감사합니다.

IFNULL이란걸 처음봐서(죄송ㅠ)  검색을 해봤는데요.
IFNULL을 사용할 때 주의할점이 있나요? 
다른 블로거글들을 봤을땐 where 절 같은데에다 사용하면 퍼포먼스가 안좋아진다는 글도있는 것 같아서요.
ORDER BY는 영향이 크게 없을까요?


IFNULL(필드명,대체할값)인데 
예를들어 위의 바나나는 IFNULL(900,4000)이고 바나나는 4000원이라 NULL이 아닌데 어떻게 변환을 했는지도 이해가 안되지않아요 ㅠ


by 마농 [2019.09.19 17:49:27]

1. 앞의 값이 널이면 뒤의 값으로 대체, 널이 아니면 앞의 값.
  - IFNULL(900, 4000) --> 900
  - IFNULL(null, 1000) --> 1000
2. 성능 문제를 논하기 이전에 이 기능이 필요한가? 부터 생각하세요.
  - 해당 기능이 필요하면 사용하면 됩니다.
  - 성능은 그 다음에 생각해야죠.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입