为什么mysql查询在返回null时不返回0

问题描述:

我试图在字段为空时返回0值。例如,如果有一个id_articulo与importe空,查询将返回0为什么mysql查询在返回null时不返回0

CREATE TABLE `PUJAS` (
    `ID_PUJA` int(11) NOT NULL AUTO_INCREMENT, 
    `ID_ARTICULO` int(11) DEFAULT NULL, 
    `ID_USUARIO` int(11) DEFAULT NULL, 
    `TIEMPO` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `IMPORTE` int(11) DEFAULT NULL, 
    PRIMARY KEY (`ID_PUJA`) 
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAU 

LT CHARSET=latin1; 

QUERY

SELECT IFNULL(MAX(IMPORTE),0) FROM PUJAS GROUP BY ID_ARTICULO 

enter image description here

+0

粘贴实际的SQL代码会比屏幕截图好很多。 – tadman 2013-05-14 00:05:42

你忘了IFNULL()功能

的第二个参数
SELECT IFNULL(MAX(IMPORTE), 0) FROM PUJAS GROUP BY ID_ARTICULO 
+0

对不起,我粘贴的代码不好。我也试过,并且不起作用 – jal 2013-05-13 23:04:16

+0

并且'SELECT MAX(IFNULL(IMPORTE,0))从PUJAS GROUP BY ID_ARTICULO'? – zavg 2013-05-13 23:05:41

+0

太,它不返回0 :( – jal 2013-05-13 23:07:10

再添IFNULL:

SELECT IFNULL(MAX(IFNULL(IMPORTE, 0)), 0) FROM PUJAS GROUP BY ID_ARTICULO 

你可以使用COALESCE():

SELECT COALESCE (MAX (Importe), 0) 
FROM 
    ... 

,将返回从它的参数的第一个非空值。如果MAX为null,将返回0

编辑

也许您正在寻找这样的:

SELECT 
    CASE WHEN SUM(IMPORTE IS NULL)=0 THEN MAX(IMPORTE) ELSE 0 END 
FROM 
    PUJAS 
GROUP BY 
    ID_ARTICULO 

这将返回MAX(Importe)如果没有Importe每个ID_ARTICULO有一个空值。否则它将返回0.请参阅小提琴here

+0

我也试过了.. – jal 2013-05-13 23:10:21

+0

@jal它必须工作...但即使您的查询看起来正确http://sqlfiddle.com/#!2/bd4e9/ 2 – fthiella 2013-05-13 23:16:27

+0

@jal它返回什么? null或其他值? – fthiella 2013-05-13 23:16:54