我有代码:
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
哪个给我:
我想要得到的是消除啤酒厂的ibu值小于5(很多啤酒厂只有1或2-在此快照中不可见)。但是我仍然希望保留分区而不进行分组-因此图片上可见的行将保持不变。
我尝试了WHERE,HAVING,子查询。但是我收到错误消息,说我必须对其他值进行分组-例如“在WHERE中不允许使用聚合函数”。
答案 0 :(得分:1)
如果您对有效的brewery_ids进行子查询,则可以加入该列表。像这样:
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。然后将其放入您的查询中。
答案 1 :(得分:1)
我会坚持使用具有使用窗口功能的查询:
\eqref{}