mysql ifnull仍然返回null

bvjveswy  于 2021-06-15  发布在  Mysql
关注(0)|答案(2)|浏览(464)

我正在尝试选择列中的总值。当列中没有数据时,语句返回 NULL .
我想更换退货的 NULL 以0.00为单位。
我试图在我的sql语句中实现ifnull函数(我使用的是mysql)。当我执行语句时 NULL .
有人知道我怎么解决这个问题吗?
以下是我的完整声明:

SELECT CONCAT('€ ', FORMAT(SUM(IFNULL(mutations,'0.00')),2)) AS total
FROM scu_statement 
WHERE type='2'

表格:

CREATE TABLE `scu_statement` (
  `id` int(11) NOT NULL,
  `type` int(11) NOT NULL,
  `mutations` decimal(50,2) NOT NULL,
  `status` int(11) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
67up9zun

67up9zun1#

如果返回集没有行,sum()返回null,那么只需添加ifnull函数来检查sum是否返回null

SELECT CONCAT('€ ', FORMAT(IFNULL(SUM(mutations), 0),2)) AS total
FROM scu_statement 
WHERE type='2'

验证示例:

SELECT CONCAT('€ ', FORMAT(IFNULL(SUM(mutations), 0),2)) AS total
FROM (SELECT * FROM (SELECT 1 AS mutations) as t1 LIMIT 0) as q

sum函数忽略空值。您可以通过以下方式进行验证:

SELECT SUM(X)
FROM (
             SELECT 1 AS X
             UNION SELECT 10 AS X
             UNION SELECT NULL AS X    
         ) AS q
nwo49xxi

nwo49xxi2#

这个 SUM() 函数忽略空值,并将所有非空值相加。
原因有两个 SUM() 可能返回null:
所有行都有空值。
找不到行。
自从你的 mutations 列为 NOT NULL ,这不是第一个原因,因此是因为找不到行。
要防止null,您需要调用 IFNULL 外面 SUM :

SELECT CONCAT('€ ', FORMAT(IFNULL(SUM(mutations),0),2)) AS total
FROM scu_statement 
WHERE type='2'

相关问题