2012-07-25 2 views
0

두 개의 열이있는 경우 가격 (full_price, sales_price)이 열에 숫자가 들어 있습니다. SQL 문을 여러 순서로 수행 할 수 있지만 이러한 열에 값이있을 때 어떻게 작동하는지 알 수 있습니까?mySQL 문 ORDER BY 여러 열

("SELECT * FROM table ORDER BY full_price,sales_price DESC") 

어떻게하면 두 열 중 가장 작은 값을 선택합니까? full_price와 sales_price 사이의 선택된 열을 기반으로 데이터를 순서대로 배치합니까?

참고 : sales_price에는 값이없는 경우가 있습니다.

감사

편집 :

id full_price  sales_price 
1  23     42   
2  342    200 
3  1 
4  10     8 

난 할 노력하고있어 것은이 숫자로, 나는이 출력 데이터는 최저 가격과 관련된 수 있습니다.

순서가 있어야한다 :

3,4,1,2 

이유 :

3: 1 
4: 8 
1: 23 
2: 200 
+2

예제를 제공해 주시겠습니까? –

+0

예를 보여주기 위해 편집했습니다. – hellomello

답변

4

을하고 full_price는 NULL이 될 수 없습니다 : FULL_PRICE 및 sales_price의 시온 다음 시도 당신은 아마 일관성을 얻을 수있는 보조 정렬 키를 추가 할

select ... 
from ... 
where ... 
order by case 
    when sales_price is null then full_price 
    else least(full_price, sales_price) 
end 

및 관계로부터 합리적인 결과.

+0

다른 정렬 키를 추가하는 방법은 무엇입니까? 케이스에 추가 할 것인가 아니면 끝난 후에해야할까요? – hellomello

+0

나는 모든 해답을 시험해 보았다. 고마워요 – hellomello

+1

@andrewliu : 두 번째 정렬 키를 'end' 다음에 추가 할 것입니다 :'case by ... end, some_other_column' –

1
SELECT * FROM table 
ORDER BY case when sales_price is null or full_price is null 
       then 0 
       when full_price > sales_price 
       then sales_price ASC 
       else full_price ASC 
     end 
0

당신이 다음 시도 FULL_PRICE 및 sales_price의 차이에 따라 결과를 원하는 경우 :

SELECT * 
FROM table 
ORDER BY ABS(full_price - IF(sales_price IS NULL, 0, sales_price)) ASC 

또는 당신이 compari에 기초한 결과를 원한다면 당신의 빈 sales_price이 NULL이라고 가정

SELECT * 
FROM table 
ORDER BY IF(full_price < IF(sales_price IS NULL, 0, sales_price), 
      full_price , sales_price) ASC