2014-10-16 66 views
0

嘿,我在轨道应用中使用这个查询。我正在尝试查找唯一员工的数量,因此我创建了一个查询,查找有多少个total_employees,然后找出有多少个duplicatesduplicates是使用id_number制定的)。然后我从total_employees中减去duplicates,给我独特个体的数量。该id_number字段不是强制性的,因此id_number的空值应该不包含在计数中。删除空值的Rails/SQL语句

问题是,当我尝试运行查询,如果duplicates为空unique_employees将成为空。

这里是我的查询

 SELECT SUM(total_count.count) - SUM(duplicate_count.count) as unique_employees, SUM(total_count.count), SUM(duplicate_count.count) 
    FROM (
     SELECT COUNT(1) as count 
     FROM participants 
     JOIN training_programs 
      ON training_programs.id = participants.training_program_id 
     WHERE training_programs.category IN ('B', 'C', 'D') 
      AND training_programs.skills_development_id = 123 
      AND participants.foreign = FALSE 
      AND participants.race = 'African' 
      AND participants.gender = 'Male' 
      AND participants.employed = true 
    ) as total_count, 
     (SELECT SUM(count) as count 
     FROM (SELECT COUNT(id_number)-1 AS count 
     FROM participants 
     JOIN training_programs 
      ON training_programs.id = participants.training_program_id 
     WHERE training_programs.category IN ('B', 'C', 'D') 
      AND training_programs.skills_development_id = 123 
      AND participants.foreign = FALSE 
      AND participants.race = 'African' 
      AND participants.gender = 'Male' 
      AND participants.employed = true 
      AND participants.id_number <> '' 
     GROUP BY id_number 
     HAVING COUNT(id_number) > 1) as duplicated_records 
    ) as duplicate_count 

,所以我得到这个

query_results

我SQL富没有在世界上最好的,所以我试图找出如何让所有空值被视为0.我还希望在单个查询中具有这一点,因为它是在循环中运行的,并且根据给定的输入,每次保存必须重新运行几十次。

或以上任何帮助将是伟大的。提前

编辑

谢谢如果我是添加一个重复的查询运行正常。所以查询是刚刚好,如果有没有重复那么无论total_empolyees数量的查询将返回0

回答

1

只是围绕着所有的值,可以潜在地在IFNULL

SUM(IFNULL(duplicate_count.count,0)) 
+0

哥们那确实产生空我在找什么!非常感谢。我整天碰到这堵墙 – TheLegend 2014-10-16 18:09:10

+0

我编辑了问题名称以反映我遇到的实际问题。 – TheLegend 2014-10-16 18:10:49