2017-04-27 7 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ないヌル(8べきである)及び4つのヌル(2なければならない)として10を返しています。

任意の助けいただければ幸いおかげ

+0

「SELECT del.Completion_Date FROM requirements 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 

ノートのようなものをしようとするだろう。おそらく、それを正しい列に置き換える必要があります。

関連する問題