2010-12-01 7 views
2

1日に行ったインタビューの回数を報告しようとしています。日付と回数のグループ化とグループ化は、値のない場合は0を返します。

だから私は、このような

interviewid、staffid、日付、コメント...

と、単一の日付フィールドを持つ2005年から2020年までのすべての日付を含む日付参照テーブルとしてインタビュー のテーブルを持っていますrefという名前です

私のクエリは次のとおりです。

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where type = 2 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d') 

ですが、私たちが行ったインタビューではなく、ときに我々はすべてのインタビューをしなかったを表示するには、正常に動作します...

たとえば、これは返します

1 
2 
4 

返信する必要があります。

0 
1 
0 
2 
0 
4 
0 

編集:私はそれを削除した場合、クエリが正常に動作しますので

どうやら問題は、where句から来ている...

答えて

3

right join 

代わり

left join 
に置き換えてみてください

別の変更は

where type = 2 

SO最終クエリ

SELECT count(*) as cnt FROM `interviews` 
right JOIN `dateRef` ON `date` = ref where (type = 2 OR type is null) 
and date > date_sub(now(),interval 7 day) group by date_format(ref,'%Y-%m-%d') 
+0

私はまったく同じ結果を持っています –

+0

updated answer、 –

0

where type = 2 OR type IS NULL 

に私が正しくあなたを理解していれば、 typeはインタビューの列です。結合された表には、右結合を使用しているため、インタビューのない日付の行が含まれていますが、これらの行は、表にこれらの日付のエントリがないため、 type(およびその他の列は interviews)の NULLです。彼らは type=2を必要とするあなたの WHERE句によってフィルタリングされます。そのため、 COUNTには表示されません。

少なくとも、interviews.typeが決してNULLでない場合は、WHERE (type=2 OR type IS NULL)のようなものを試してみてください。

+0

を参照してください。 –

関連する問題