sql - WHERE 与 PARTITION BY postgres 一起使用
问题描述
我有代码:
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 中不允许使用聚合函数”。
解决方案
我会坚持使用窗口函数的查询:
SELECT brewery_name, ibu, avg_ibu
FROM (SELECT br.name as brewery_name, ibu,
AVG(ibu) OVER (PARTITION BY b.brewery_id ORDER BY ibu DESC) as avg_ibu,
COUNT(ibu) OVER (PARTITION BY b.brewery_id) as cnt_ibu
FROM beers b JOIN
breweries br
ON b.brewery_id = br.brewery_id
WHERE ibu IS NOT NULL
) bb
WHERE cnt_ibu >= 5;
推荐阅读
- hibernate - JPA / Hibernate:有序列表抛出 ConstraintViolationException
- eclipse-scout - 表中的汇总行,SumTableControl
- c# - Parallel.For 循环的完整 CPU 使用率
- c# - 单元测试项目的 SonarQube 覆盖率为 0
- sql-server - 将 PowerShell 脚本从 Invoke 更改为 Bulk Copy
- numpy - 用于计算与单个交易相对应的每一行的余额的 Python 函数
- python - 调用方法的正确方法是什么?
- google-bigquery - 从表中提取 metadata_fields 以及从 bigquery 表中提取数据列
- python - 在 python 中带有 CUDA 的 OpenCV 4.1 使用错误的 OpenCV 版本
- java - Java 扫描器类没有此类元素异常错误