即使有可用值,MySQL MAX也会返回null

标签 mysql sql aggregate aggregate-functions

我正在开发 MySQL 5.7 数据库,最近在执行一个较大的查询时遇到了一些麻烦,深入研究后发现某个特定部分未按预期运行。我做了一些测试,发现发生了一些奇怪的事情。

该部分如下(必须针对特定场景对数字进行硬编码,但通常其值来自另一个表):

SELECT
    MAX(cp.dataAtualizacao) dataAtualizacao,
    MAX(m.dataRegistro) dataRegistro,
    CASE WHEN MAX(cp.dataAtualizacao) > MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) THEN MAX(cp.dataAtualizacao) ELSE MAX(COALESCE (m.dataRegistro, cp.dataAtualizacao)) END data
FROM MadeiraNegocio cp         
    LEFT JOIN MadeiraConversaNegocio c ON (cp.id = c.idNegocioOriginal OR cp.id = c.idNegocioResposta)
    LEFT JOIN MadeiraMensagemConversaNegocio m ON c.id = m.idConversa
WHERE cp.id = 959 AND ((cp.id = c.idNegocioOriginal AND 960 = c.idNegocioResposta) OR (960 = c.idNegocioOriginal AND cp.id = c.idNegocioResposta)) AND
    (cp.id = 959 OR 960 = cp.idNegocioOriginal) AND (m.idAutor != 4370 OR m.idAutor IS NULL)

照原样,此查询返回 [null, null, null]。第二个空值除外,但第一个或第三个空值除外。 真正让我害怕的是,如果我删除第一个属性上的 MAX,dataAtualizacao 就会正确返回,且值不为 NULL。

即使有一个值要聚合,MAX 怎么可能返回 null?我在这里遗漏了什么吗?

亲切的问候

编辑

MadeiraNegocio 表:

id  dataRegistro    idNegocioOriginal   cancelado   dataAtualizacao dataVisualizacao    
959 2017-08-18 11:28:58 null    0   2017-08-18 15:38:16 2017-08-18 16:00:23

MadeiraConversaNegocio 表:

id  idNegocioOriginal   idNegocioResposta   dataVisualizacaoOriginal    dataVisualizacaoResposta
288 959 960 2017-08-18 14:54:10 2017-08-18 17:34:17

MadeiraMensagemConversaNegocio

id  idConversa  idAutor mensagem    dataRegistro
229 288 4370    sometext    2017-08-18 16:25:02

最佳答案

您可以尝试使用 count(),因为它总是会返回一些值,或者您也可以尝试 COALSEC功能。

select count(field1) from table where id = 1 ;

关于即使有可用值,MySQL MAX也会返回null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45764032/

相关文章:

java - 如何使用JTable将更改的数据更新到数据库中?

mysql - 即使 id 为空,我们如何显示记录?

jquery - 如何编写这个查询以获得正确的结果?

r - 聚合重复测量数据的有效方法

用于将列值分组到列中的 PostgreSQL 查询

mysql - laravel - 查询构建器交叉连接子查询

php - Word Finder 正则表达式、PHP 和 mySQL

mysql - 使用来自其他网络的 mySQL 数据库

mysql - insert ... select ... on duplicate key update + delete obsolete 行

r - 组织子组字符串(文本)