2011-09-15 67 views
3

我已經閱讀了關於SO的大量答案,但仍然無法讓這個工作。我敢肯定,我需要一個子查詢,但不知道我應該在哪裏開始...Mysql:依賴於COUNT()列的WHERE語句?

這裏是可讀/什麼我想要做的僞:

SELECT DISTINCT cat_sub.*, COUNT(job.job_id) AS num_properties_which_meet_criteria 
FROM cat_sub 
LEFT JOIN job_cat USING (sc_id) 
LEFT JOIN job USING (job_id) 
WHERE job.village_id=2 AND num_properties_which_meet_criteria > 0 
GROUP BY sc_id 

我試圖讓我的WHERE參考job表中的有效結果數量,在這種情況下,這些數據表與job.village_id=2匹配。

所以只是爲了說清楚,我不希望連接匹配的總行數。我想要通過連接匹配的總數和符合WHERE條件的總數。

非常感謝所有幫助!

回答

6

你有HAVING子句測試聚合函數的值。

SELECT DISTINCT cat_sub.*, COUNT(job.job_id) AS num_properties_which_meet_criteria 
FROM cat_sub 
LEFT JOIN job_cat USING (sc_id) 
LEFT JOIN job USING (job_id) 
WHERE job.village_id=2 
GROUP BY sc_id 
HAVING COUNT(job.job_id) > 0 
+0

偉大的工程,只要它讓我接受! – Haroldo

3

使用having而不是where

WHERE job.village_id=2 
GROUP BY sc_id 
HAVING num_properties_which_meet_criteria > 0 
2

你嘗試:

SELECT DISTINCT cat_sub.*, COUNT(job.job_id) 
FROM cat_sub 
LEFT JOIN job_cat USING (sc_id) 
LEFT JOIN job USING (job_id) 
WHERE job.village_id=2 
GROUP BY sc_id 
HAVING COUNT(job.job_id) > 0 

UPDATE:刪除別名

2

你需要有一個「具有」條款,也可以用在查詢的SELECT部分​​使用聚合函數的條件。