qq_38872651 2024-04-25 19:17 采纳率: 0%
浏览 5

mysql 遇到一个统计数目的问题

mysql 遇到一个统计数目的问题类似这样

    count( DISTINCT CASE WHEN a.testcolumn IN ( '09' ) THEN a.name END )  as testcount

用于统计去重后符合条件的name的个数,但是当存在符合条件的数据时统计结果是对的,当不存在符合条件的数据时时,结果就是1

暂时没找到这是怎么个问题

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-25 19:17
    关注

    引自免费微信小程序:皆我百晓生

    在 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;
    

    这里做了两处改动:

    1. 使用了 IFNULL(column, value) 函数,如果 a.name 是 NULL 或者不满足条件,它会返回 -1
    2. DISTINCT 后面再次使用了 IFNULL,这一步是为了确保在没有任何符合条件的记录时,不会把 -1 当作一个独特的值进行计数。因为所有的 IFNULL(a.name, -1) 结果都是 -1,所以 COUNT(DISTINCT ...) 将返回 0。

    确保将 your_table_name 替换为你的实际表名。这个查询应该能正确地返回匹配指定条件的唯一 name 的数量,无论数据是否存在。如果不存在符合条件的数据,结果将是 0。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月25日

悬赏问题

  • ¥15 flutter网页应用用python的http服务器访问速度慢
  • ¥15 stm32按键控制霓虹灯
  • ¥15 VESTA绘图原子颜色显示异常
  • ¥15 天翼云搭建多ip l2tp
  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息