2014-03-26 65 views
1

我正在做一份報告,顯示我們每週從學校獲得的申請人數。我們在15所不同的學校招聘。我目前的查詢是這樣的。問題是,如果一所學校沒有找到申請人,那麼他們就不會出現在報告中。即使沒有申請人,我怎麼能讓學校出現?GROUP BY顯示0

SELECT 
weekofyear(tbl_job_applications.ja_date) AS 'Week #', 
tbl_universities.univ_name, 
Count(tbl_job_applications.ja_date) AS 'Applicants' 
FROM 
tbl_job_applications 
    Inner JOIN 
tbl_universities ON tbl_job_applications.univ_id = tbl_universities.univ_id 
    Inner JOIN 
tbl_positions ON tbl_job_applications.pos_id = tbl_positions.pos_id 
where year(tbl_job_applications.ja_date) = 2014 
Group by tbl_universities.univ_name , weekofyear(tbl_job_applications.ja_date) 
Order by weekofyear(tbl_job_applications.ja_date) DESC , tbl_universities.univ_name ASC; 
+1

更改內部連接到直接從應用程序到高校參加。如果所有表都具有該值,Inner將僅顯示記錄。無論在相關表中是否找到匹配,右側或左側都會顯示錶格中左側或右側的所有值。 – xQbert

+2

內部連接過濾出來的行,外部連接不行。所以,從主表開始,然後離開應用程序和大學。 –

+0

@xQbert - 快照! –

回答

0

使用LEFT JOINRIGHT JOININNER JOIN排除非加盟值,還需要進行修改,以不排除沒有ja_date值的記錄您的WHERE標準:

SELECT weekofyear(a.ja_date) AS 'Week #' 
     , u.univ_name 
     , COUNT(a.ja_date) AS 'Applicants' 
FROM tbl_universities u 
LEFT JOIN tbl_job_applications a 
    ON a.univ_id = u.univ_id 
LEFT JOIN tbl_positions p 
    ON a.pos_id = p.pos_id 
WHERE YEAR(a.ja_date) = 2014 OR a.ja_date IS NULL 
GROUP BY u.univ_name 
     , weekofyear(a.ja_date) 
ORDER BY weekofyear(a.ja_date) DESC 
     , u.univ_name ASC; 

注意,這將返回所有univ_name值,但它不會返回每univ_name值對於每週,如果這是你需要創建一個具有全周和univ_name組合的驅動程序後,最容易在子查詢中使用CROSS JOIN來完成此操作(在此示例中,它僅限於申請人至少1周的學校,如果你想要整整幾周,你必須設置不同的):

SELECT sub.*,COUNT(a.ja_date) 
FROM (SELECT DISTINCT 
      weekofyear(a.ja_date) AS week_ 
      ,u.univ_name 
      ,u.univ_id  
     FROM tbl_job_applications a 
     CROSS JOIN tbl_universities u 
    ) as sub 
LEFT JOIN tbl_job_applications a 
    ON a.univ_id = sub.univ_id 
    AND weekofyear(a.ja_date) = sub.week_ 
LEFT JOIN tbl_positions p 
    ON a.pos_id = p.pos_id 
GROUP BY sub.univ_name 
     ,sub.week_ 
ORDER BY week_ 
     ,sub.univ_name 

兩個演示:SQL Fiddle

+0

這個邏輯很有意義。不知道爲什麼,但這不會產生我期待的結果。它給了我與Inner Join相同的結果。 –

+0

你能提供樣本數據嗎? –

+0

tbl_universities數據庫中有大約100所學校。其中,我們積極招聘15名。這些都是我想顯示的tbl_job_applications看起來是這樣的 - 申請日期,名稱,電子郵件,Univ_ID 目前的出口是這樣的 - 學校,周#,申請人的計數, 「喬治亞」,」 '','1' 'Illinois','13','1' 'Michigan','13','3' 'Ole Miss','13','1' 'Tennessee','13' ','1' –

0

變更查詢,以便大學列第一和使用外連接:

FROM tbl_universities 
LEFT JOIN tbl_job_applications 
    ON tbl_job_applications.univ_id = tbl_universities.univ_id 
INNER JOIN tbl_positions 
ON tbl_job_applications.pos_id = tbl_positions.pos_id