2012-05-02 5 views
2

나는 5 열이있는 테이블이있다. 내가 찾고있는 건 최소의 null이 아닌 0이 아닌 정수가있는 열의 데이터를 출력하는 단일 선택을 수행하는 방법에 대한 예입니다.MySQL의 쿼리는 비 제로의 정수

예 테이블 :

uniqueid|int1|int2|int3|FruitStand 
1  | 2| 3| 4|Apples 
2  | 21| 4| 0|Oranges 
3  |NULL| 2| 5|Pears 

그래서 내가 쉽게 읽을

1  | 2|Apples 
2  | 4|Oranges 
3  | 2|Pears 
+0

"어느 열도 null이 아니고 값이 0이 아닌 경우"예상 결과가 두 번째 레코드에서 21을 생략하는 이유는 무엇입니까? 그것은 다소 혼란 스럽습니다. 당신은 아마 당신의 가정들을 더 자세히 설명 할 수 있습니까? –

+0

@PavelVeller 열이 null이 아니고 값이 0이 아닌 경우 제외합니다. 도움이 되었습니까? 나는 편집에 넣어 –

+0

의미가 있습니다. 나는 규칙의 '최소'부분을 보지 못했을 것 같다. –

답변

5
SELECT uniqueid, 
FruitStand, 
LEAST(
    COALESCE(int1, int2, int3), 
    COALESCE(int2, int3, int1), 
    COALESCE(int3, int1, int2)) AS number 
FROM myTable 

이 쿼리의 결과를 얻을 것이다, 나는 COALESCE의 각 인수에 대해 NULLIF(intX, 0)을 생략. 0 값을 무시하기 위해 값을 추가해야합니다.

LEAST 기능을 사용할 때 인수가 NULL 경우 당신 때문에 MySQL은 5.0.13, LEAST 반환 NULL의로 NULL 값을 방지하기 위해 COALESCE를 사용해야합니다

.

자세한 내용은 this question을 참조하십시오.

+0

에반, nullif에 대한 확신이 있으십니까? 내가 nullif없이 노력하고 그것은 null에 관계없이 최저를 반복합니다 –

+0

에반 - N/m 지금보십시오 –

2
SELECT LEAST(
    IF(int1,int1,999999), 
    IF(int2,int2,999999), 
    IF(int3,int3,999999) 
); 

여기에서 값 999999는 해당 열의 가능한 최대 값이어야합니다.