2017-03-13 121 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;