sql - Posgresql 交叉表替代方案
问题描述
我正在寻找交叉表替代品。我在 Timescaledb (posgresql) 超表中有多行数据:
例如,当类别 2 > 4 时,我需要计算类别 = 1 的平均值。我现在正在做的是使用交叉表进行枢轴,然后我计算类别 1 的平均值。有没有办法在没有枢轴(交叉表)的情况下做到这一点?
有些查询我不能使用交叉表,因为在我只选择了单个“id”的地方不起作用。它将类别聚合为一行。
我正在寻找可以将单个值用作“id”并且比交叉表更快的东西。我有巨大的数据集。
解决方案
您可以只使用条件聚合。在 Postgres 中,这看起来像:
select id,
avg(value) filter (where category = 1)
from t
where category in (1, 2)
group by id
having avg(value) filter (where category = 2) > 4;
推荐阅读
- python - Numpy 布尔逻辑(检查元素是否不是东西)
- python - TenserFlow,如何保存样式传输模型供以后使用?
- java - 如何交换字符串中的每2个字母?- 爪哇
- c# - WCF CollectionDataContract 字典构造函数
- python - sftp用Python写操作原子性
- docker - 网络在 Docker / Centos 7.9 上不起作用
- reactjs - 正确打印 exception.stack 直到尝试在 ReactJS 中解析字符串
- react-native - 显示带有“react-native-svg”库的 SVG 图像,但是在 iOS 中遇到“无法识别的字体系列”错误(Android 工作正常。)
- c# - 源代码管理中的 .NET Core 环境变量
- ruby - 不确定如何使用 ruby 客户端下载 google drive thumbnailLink