从mysql字段中查找具有非零值和空值的最大值和最小值

时间:2016-04-30 10:38:57

标签: mysql

从mysql字段中查找最大值和最小值,结果不应该是

zeronull

我们已经尝试过,

SELECT LEAST(MIN(`product_price`), MIN(NULLIF(`product_special_price`,'0'))) as min_price,
    GREATEST(MAX(`product_price`), MAX(NULLIF(`product_special_price`,'0'))) as max_price
        FROM (`tbl`)            

在这里我们在没有输入product_special_price时得到NULL结果

Example SQL FIDDLE

当前输出/问题:

enter image description here

2 个答案:

答案 0 :(得分:1)

您只需使用WHERE语句过滤掉0NULL值:

SELECT MIN(column) AS least, MAX(column) AS greatest
FROM table
WHERE column != 0 AND column IS NOT NULL

columntable分别替换为相应的列和表格。

答案 1 :(得分:0)

您没有发布您期望的结果,所以我不能完全确定我是否正确阅读了您的问题,但CASE声明可用于消除您不想要的值。因此,当列的值为0时,您只是不将其包含在LEAST / GREATEST函数中。按照下面这种方式重写SQL,我得到min_price 72& max_price 81(使用你的SQL小提琴数据) - 这就是你所追求的吗?

SELECT 
CASE tbl.simple_price
WHEN 0 THEN MIN(`price`)
ELSE LEAST(MIN(`price`), MIN(`simple_price`)) 
END as min_price,
CASE tbl.simple_price
WHEN 0 THEN MAX(`price`)
ELSE GREATEST(MAX(`price`), MAX(`simple_price`)) 
END as max_price
FROM (`tbl`)