sqlcount(distinct case when)疑惑

部门,count(distinct case when)分组后得到结果不对,偏大是怎么回事呢,怎么解决呢

  • 这篇博客: SQL中count和case when结合使用统计某个条件下不重复的记录数中的 一、统计某一种类型的不重复的个数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 比如,要统计所有班级姓李的同学和姓王的同学的人数,SQL应该怎样写呢?

    以李姓同学的统计为例,我将名字以"李"开头的同学进行计数,其他汉字开头的记录为null即可。注意,这里的else语句中如果写成0将会把其他的类型也加入到计数中。以下是我的SQL:

    --统计所有班级中姓李的和姓王的同学个数
    select count(case when name like '李%' then name else null end) as li_cnt,count(case when name like '王%' then name else null end) as wa_cnt from student;

    结果如下,李姓的同学有5个,王姓的同学有3个,跟预期相符:

    其实,这里的else语句可以省略掉,没有else如果不满足条件的话也会以null进行填充。

    --不写else也可以得出正确的结果
    select count(case when name like '李%' then name end) as li_cnt,count(case when name like '王%' then name end) as wa_cnt from student;

  • 以下回答由chatgpt基于相关博客总结生成:

    对于该问题,可能的原因是在统计时,count(distinct case when)的逻辑有误,导致统计出的结果偏大。解决方法可以从以下几个方面入手:

    1.检查SQL语句中的count(distinct case when)语句是否正确,是否把多余的数据也计算进去了。可以用一些数据抽样工具对结果进行抽样统计,查看其中异常数据,进一步确认问题。

    2.检查数据源是否存在问题。可能是数据源中存在重复数据,导致统计时出现误差。通过检查数据源,排除数据源本身的问题。

    3.如果数据源确定无误,可以考虑使用其他的统计方法进行替代。例如使用子查询或者临时表进行统计,避免使用复杂的count(distinct case when)语句,进一步提高统计准确性。

    具体的实现过程需要根据具体情况进行调整,以下是一个基础的SQL语句示例,用于检查count(distinct)的结果是否正确:

    -- 检查count(distinct)的结果是否正确 select count(*), count(distinct department_id) from employees;

    该语句可以统计出employees表中department_id的数量及其中不重复的部门数量,检查结果是否符合预期。