2017-03-13 124 views
0

我有兩個表:評論和地區。 SQL查詢是:按COUNT篩選的SQL查詢

SELECT comments.region, 
    COUNT(comments.region) 
FROM comments, regions 
WHERE comments.region = regions.id 
GROUP BY comments.region; 

結果表(ID,COUNT(comments.region)):

1 | 3  
2 | 1 
3 | 7 
4 | 6 
5 | 2 

我如何添加規則來過濾所有行COUNT(comments.region) > 5?最後,我需要得到的彙總表:

3 | 7 
4 | 6 
+2

'HAVING COUNT(comments.region)> 5' – dnoeth

+2

提示今天:切換到現代的,明確的'JOIN'語法!易於編寫(沒有錯誤),更易於閱讀和維護,並且在需要時更容易轉換爲外部聯接。 – jarlh

回答

4

使用HAVING HAVING子句

SELECT comments.region, COUNT(comments.region) 
    FROM comments, regions 
    WHERE comments.region = regions.id 
    GROUP BY comments.region 
    HAVING COUNT(comments.region) > 5; 

在這裏看到更多的細節:

SELECT c.region, COUNT(*) 
FROM comments c 
INNER JOIN regions r 
    ON c.region = r.id 
GROUP BY c.region 
HAVING COUNT(*) > 5 

備註:

我使用ON子句將您的隱式聯接替換爲明確的INNER JOIN。正如@GordonLinoff喜歡說的,你應該避免把逗號放在WHERE條款中。我還在查詢中引入了表別名,這使我們不必重複編寫完整的表名。

1

您是否在尋找HAVING

SELECT comments.region, 
      COUNT(comments.region) 
    FROM comments, 
      regions 
    WHERE comments.region = regions.id -- obsolete syntax: use JOIN instead 
GROUP BY comments.region 
    HAVING COUNT(comments.region) > 5;