首页 > 解决方案 > PostgresSQL 'WHERE' 应该在哪里聚合?

问题描述

以下 postgres 查询有效:

dvdrental=# SELECT title, COUNT(title) AS c FROM film          
JOIN inventory
ON film.film_id = inventory.film_id GROUP BY film.title LIMIT 5;

      title       | c 
------------------+---
 Academy Dinosaur | 8
 Ace Goldfinger   | 3
 Adaptation Holes | 4
 Affair Prejudice | 7
 African Egg      | 3
(5 rows)

Time: 1.671 ms

然后,如果我想限制说,以免库存中具有特定数量的电影或计算库存中有多少电影具有特定数量,那么起点是:

dvdrental=# SELECT title, COUNT(title) AS c FROM film
JOIN inventory
ON film.film_id = inventory.film_id GROUP BY film.title WHERE c = 4;
ERROR:  syntax error at or near "WHERE"
LINE 3: ...m.film_id = inventory.film_id GROUP BY film.title WHERE c = ...
                                                             ^
Time: 0.337 ms

..但它不起作用。

我已经尝试了WHERE c = 4这里所有可能的位置,但它不起作用。有一种感觉,如果它是 MySQL 而不是 PostgresSQL,它会起作用。

有谁知道如何修理它?

标签: sqlpostgresqlgroup-by

解决方案


它会having代替where

    SELECT title, COUNT(title) AS c FROM film
    JOIN inventory
    ON film.film_id = inventory.film_id     
    GROUP BY film.title 
    having COUNT(title)=4

HAVING用于聚合函数 的子句


推荐阅读