我有密码:

SELECT br.name brewery_name, ibu, AVG(ibu) OVER (PARTITION BY
       b.brewery_id ORDER BY ibu DESC)
FROM beers b
JOIN breweries br
ON b.brewery_id = br.brewery_id
WHERE ibu IS NOT NULL

这给了我:
sql - 与PARTITION BY postgres一起使用的地方-LMLPHP
我想要的是淘汰那些ibu值小于5的啤酒厂(很多啤酒厂都有1或2个——在这张快照上看不到)。但我仍然希望保持分区而不分组,这样图片上可见的行将保持不变。
我试过在哪里,有,子查询。但我得到的错误是,我必须对其他值进行分组,例如“在WHERE中不允许使用聚合函数”。

最佳答案

如果对有效的酿酒厂ID执行子查询,则可以加入该列表。这样地:

SELECT br.name brewery_name, ibu, AVG(ibu) OVER (PARTITION BY
       b.brewery_id ORDER BY ibu DESC)
FROM beers b
JOIN (
   SELECT brewery_id
   FROM beers
   GROUP BY brewery_id
   HAVING COUNT(DISTINCT ibu) >= 5
) X ON X.brewer_id = b.brewery_id
JOIN breweries br ON b.brewery_id = br.brewery_id
WHERE ibu IS NOT NULL

像这样的查询的好处是——您可以运行子查询来验证它是否仅限于所需的id。然后把它放到你的查询中。

09-27 10:26