首页 > 解决方案 > 使用 MAX 函数将 NULL 转换为有意义的值 - mySQL

问题描述

谁能帮我解决一下 mySQL 中令人难以置信的令人沮丧的代码行。

这是此案例的延续:使用案例“透视”键|值表返回空白列... mySQL

该示例中提供的代码有效,但现在我正在投入生产,有一条线我无法正常工作。我怀疑这是由于 max 子句中的 NULL 值,但我不确定如何解决。

我希望麻烦的线是:

 MAX(case when `meta_key`='key1' and (`meta_value`='Validated' or `meta_value` is null) then 'Validated' else 'Not Validated' end) as `key1`

即,NULL = 已验证;已验证 = 已验证;其他任何内容 = 未验证。

更新 问题似乎null不是由值为空的相应键|值引起的,而是由于该用户没有对应的键|值对。这会产生奇怪的结果。

例如,请参阅http://sqlfiddle.com/#!9/90f2d9/1

标签: mysqlnullmax

解决方案


以下似乎可以按您的意愿工作:

IFNULL(MAX(CASE WHEN `meta_key`='key1' AND `meta_value`<>'Validated' THEN'Not Validated' END), 
       'Validated') as `key1`           

我在这里颠倒了您的逻辑,因此任何具有key1未验证值的东西都将返回Not Validated,其他任何东西都将返回NULL。然后我用sIFNULL()替换所有NULLValidated

SQL Fiddle 示例


推荐阅读