2017-04-27 2 views
0

특정 필드에 대해 null 값을 갖는 레코드의 백분율을 찾으려고합니다. 이 경우에는 2 개의 테이블이 있습니다. 'Requirements'와 'Deliverables'두 테이블 모두 'Completion_Date'열이 있습니다. 'Completion_Date'에 대한 Null 값과 'Completion_Date'에 대한 Null 값을 가진 산출물의 수를 계산하고 싶습니다. 내부 조인 및 왼쪽 조인을 수행하여 요구 사항 및 산출물의 총계를 얻었지만 정확한 개수의 null 필드가 표시되지 않습니다.MySQL은 내부 조인을 사용하여 null을 계산합니다.

내 현재 조회 :

SELECT count(*) as countAll, count(del.Completion_Date) as countNotNull , count(*) - count(del.Completion_Date) as countNull, 
100.0 * count(del.Completion_Date)/count(*) as PercentNotNull, 100.0 * (count(*) - count(del.Completion_Date))/count(*) as PercentNull 
FROM requirements req 
INNER JOIN projects pro 
    ON req.Project_ID = pro.Project_ID 
INNER JOIN assigned_users u 
    ON u.Project_ID=pro.Project_ID 
LEFT JOIN deliverables del 
    ON del.Project_ID=u.Project_ID 
WHERE u.User_ID=4 

은 현재 총 (수정), 6하지 널 (null) (8이어야한다) 및 4 널 (2이어야 함)으로 10을 반환합니다.

어떤 도움을 주시면 감사하겠습니다 감사합니다

+0

'del.Completion_Date FROM 요구 사항 req inner join ...'을 수행하여 계산할 행/값을 확인하십시오. – Solarflare

답변

0

그것은 당신의 테이블 데이터를 보지 않고 말할 어렵다, 그러나 나는 문제가 여러 사용자가 동일한 프로젝트에 인도의 따라서 총 수를 할당 할 수 있다는 사실이 될 수 있다고 생각 곱할 수 있습니다.

나는이 질문에 나는 deliverables 테이블에 deliverableID 컬럼의 존재를 가정하는 것이이

SELECT count(*) as countAll, 
     count(distinct case when del.Completion_Date is not null then del.deliverableID end) as countNotNull, 
     count(distinct case when del.Completion_Date is null then del.deliverableID end) as countNull, 
     100.0 * count(distinct case when del.Completion_Date is not null then del.deliverableID end)/count(*) as PercentNotNull, 
     100.0 * count(distinct case when del.Completion_Date is null then del.deliverableID end)/count(*) as PercentNull 
FROM projects pro 
JOIN requirements req 
ON  req.Project_ID = pro.Project_ID 
JOIN assigned_users u 
ON  u.Project_ID=pro.Project_ID 
LEFT JOIN 
     deliverables del 
ON  del.Project_ID=u.Project_ID 
WHERE u.User_ID = 4 

주와 같은 뭔가를 시도 할 것입니다. 당신은 아마 그것을 바른 칼럼으로 대체해야 할 것입니다.

관련 문제