안녕하세요, 레일즈 애플리케이션에서이 쿼리를 사용하고 있습니다. 나는 고유 직원의 수를 찾으려고 노력 중입니다. 그래서 얼마나 많은 (duplicates
이 id_number
을 사용했는지) duplicates
이 얼마나 많은지를 파악한 total_employees
이 얼마나 많은지를 알아낼 하나의 쿼리를 작성했습니다. 그 다음 나는 total_employees
에서 duplicates
을 뺀다. id_number
필드는 필수가 아니므로 id_number
의 값이 null이어야합니다.Nails 값을 빼는 레일/SQL 문
문제는 duplicates
이 null 인 경우 쿼리를 실행하면 unique_employees
의 수가 null이됩니다. 여기
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
인이
내 SQL foo는 세계 최고의 내가 모든 방법을 알아 내려고 노력하고 있어요되지 않도록 Null 값을 0으로 볼 수 있습니다. 루프에서 실행되고 제공된 입력에 따라 저장 당 수십 번 다시 실행해야하기 때문에이 쿼리를 단일 쿼리 내에서 사용하고 싶습니다.
또는 위의 도움말은 유용 할 것입니다. 사전
편집
감사가 나는 쿼리가 잘 실행 중복 추가 할 수 있었다면. 그래서 쿼리는 상관없이 아무 중복이없는 경우 total_empolyees의 수는 쿼리가 0
야에 널 (null)을 얻을 수있는 모든 값을 둘러싸고 돌려 보낼 단지 좋은 나는 무엇을 찾고 있었습니까! 정말 고맙습니다. 나는이 벽을 하루 종일 때렸다. – TheLegend
나는 실제 문제를 반영하기 위해 질문 이름을 편집했다. – TheLegend