mysql 遇到一个统计数目的问题类似这样
count( DISTINCT CASE WHEN a.testcolumn IN ( '09' ) THEN a.name END ) as testcount
用于统计去重后符合条件的name的个数,但是当存在符合条件的数据时统计结果是对的,当不存在符合条件的数据时时,结果就是1
暂时没找到这是怎么个问题
mysql 遇到一个统计数目的问题类似这样
count( DISTINCT CASE WHEN a.testcolumn IN ( '09' ) THEN a.name END ) as testcount
用于统计去重后符合条件的name的个数,但是当存在符合条件的数据时统计结果是对的,当不存在符合条件的数据时时,结果就是1
暂时没找到这是怎么个问题
引自免费微信小程序:皆我百晓生
在 MySQL 中,如果你遇到这种情况,即当没有符合条件的数据时,COUNT(DISTINCT ...)
返回的是 1,而不是 0,这可能是因为即使在 CASE
语句中条件未满足,DISTINCT
还是会包含至少一个 NULL 值。在这种情况下,你可以稍微调整查询结构,确保只有在满足条件时才进行计数。一种解决方法是使用 IFNULL
函数将 NULL 转换为可计数的值(例如 -1),然后过滤掉这些特殊值。
以下是修改后的 SQL 查询示例:
SELECT COUNT(DISTINCT
IFNULL(
CASE WHEN a.testcolumn IN ('09') THEN a.name ELSE -1 END,
-1
)
) AS testcount
FROM your_table_name a;
这里做了两处改动:
IFNULL(column, value)
函数,如果 a.name
是 NULL 或者不满足条件,它会返回 -1
。DISTINCT
后面再次使用了 IFNULL
,这一步是为了确保在没有任何符合条件的记录时,不会把 -1
当作一个独特的值进行计数。因为所有的 IFNULL(a.name, -1)
结果都是 -1
,所以 COUNT(DISTINCT ...)
将返回 0。确保将 your_table_name
替换为你的实际表名。这个查询应该能正确地返回匹配指定条件的唯一 name
的数量,无论数据是否存在。如果不存在符合条件的数据,结果将是 0。