MySQL查询选择最小的非null,非零整数

时间:2012-05-02 19:48:03

标签: mysql

我有一个包含5列的表:uniqueidint1int2int3FruitStand。我正在寻找的是一个关于如何进行单个选择的示例,该选择输出具有最小非空,非零整数的列的数据。

示例表:

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

2 个答案:

答案 0 :(得分:6)

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

为了便于阅读,我省略了NULLIF(intX, 0)中每个参数的COALESCE。您需要添加这些以忽略零值。

使用COALESCE函数时,您需要使用NULL来避免LEAST值,因为从MySQL 5.0.13起,LEAST会返回NULL任何参数都是NULL

有关详细信息,请参阅this question

答案 1 :(得分:3)

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

此处,值999999应该是这些列的最大可能值。