使用聚合别名的地方

where using alias of aggregate

这个查询

select r1.name, count(stars) as reviewCount 
from (reviewer r1 join reviewer r2 using(rID)) join rating using(rID) 
group by r1.name;

产生以下输出

    +------------------+--------------+
    | name             | reviewCount |
    +------------------+--------------+
    | Ashley White     |            1 |
    | Brittany Harris  |            3 |
    | Chris Jackson    |            3 |
    | Daniel Lewis     |            1 |
    | Elizabeth Thomas |            2 |
    | James Cameron    |            1 |
    | Mike Anderson    |            1 |
    | Sarah Martinez   |            2 |
    +------------------+--------------+

我想列出 reviewCount > 3 的用户,如下所示

+------------------+--------------+
| name             | reviewCount |
+------------------+--------------+
| Brittany Harris  |            3 |
| Chris Jackson    |            3 |
+------------------+--------------+

我试过使用 where 和 having 子句,但结果是 Empty set (0.01 sec)

select r1.name, count(stars) as reviewCount 
from (reviewer r1 join reviewer r2 using(rID)) join rating using(rID) 
group by r1.name
having reviewCount > 3;

我缺少什么?

edit1 : 参考 样本数据进行测试

编辑 2:还有谁能建议我如何在不使用计数和

的情况下编写此查询

结果实际上是正确的,但您的查询需要稍作修改。您需要使用 >= 而不是 >

HAVING reviewCount >= 3;

我宁愿使用聚合列也不愿使用它的别名,因为它适用于大多数 RDBMS。

HAVING count(stars) >= 3