max_n_by() 函数
工具包TimescaleDB 工具包函数在 Timescale 社区版下可用。它们已自动包含在 Timescale 中,但对于自托管的 TimescaleDB,必须单独安装。点击了解更多。Timescale Cloud:性能、规模、企业级
自托管产品
MST
简介
从列中获取 N 个最大值,每个值都带有关联数据。例如,可以返回一个伴随列或整行。
max_n_by()
函数的结果与常规 SQL 查询 SELECT ... ORDER BY ... LIMIT n
相同。但与 SQL 查询不同的是,它们可以像其他聚合超函数一样进行组合和复合。
要获取带伴随数据的 N 个最小值,请使用 min_n_by()
。要获取不带伴随数据的 N 个最大值,请使用 max_n()
。
相关超函数组
聚合
- max_n_by
- 跟踪一组值中的最大值及关联数据
访问器
- into_values
- 从 MaxNBy 聚合中返回最大值及关联数据
汇总
- rollup
- 合并多个 MaxNBy 聚合
max_n_by(value BIGINT | DOUBLE PRECISION | TIMESTAMPTZ,data ANYELEMENT,capacity BIGINT) MaxNBy
构建一个聚合,它跟踪通过的最大值以及随值一起传递的一些关联数据。
必填参数
名称 | 类型 | 描述 |
---|---|---|
值 | BIGINT , DOUBLE PRECISION , TIMESTAMPTZ | 传递到聚合中的值 |
数据 | ANYELEMENT | 与特定值关联的数据 |
容量 | BIGINT | 要保留的值的数量。 |
返回
列 | 类型 | 描述 |
---|---|---|
max_n_by | MaxNBy | 编译后的聚合。请注意,确切的类型将根据输入类型是 MaxByInts、MaxByFloats 还是 MaxByTimes 而有所不同 |
into_values(agg MaxNBy,dummy ANYELEMENT) TABLE (value BIGINT | DOUBLE PRECISION | TIMESTAMPTZ,data ANYELEMENT)
这将返回聚合所见的最大值及其关联值。请注意,PostgreSQL 需要一个与关联值类型匹配的输入参数,以便确定响应类型。
必填参数
名称 | 类型 | 描述 |
---|---|---|
agg | MaxNBy | 要返回结果的聚合。请注意,此处的确切类型因存储的数据类型而异。 |
dummy | ANYELEMENT | 这纯粹是为了通知 PostgreSQL 响应类型。通常将 NULL 转换为适当的类型。 |
返回
列 | 类型 | 描述 |
---|---|---|
into_values | TABLE (value BIGINT , DOUBLE PRECISION , TIMESTAMPTZ, data ANYELEMENT) | 创建此聚合时所见的最大值及关联数据。 |
示例
找出 i = 1 到 10000 时,i * 13 % 10007
的前 5 个最大值,以及生成该模数的整数结果
SELECT into_values(max_n_by(sub.mod, sub.div, 5),NULL::INT)FROM (SELECT (i * 13) % 10007 AS mod, (i * 13) / 10007 AS divFROM generate_series(1,10000) as i) sub;
into_values-------------(10006,3)(10005,7)(10004,11)(10003,2)(10002,6)
rollup(agg MaxNBy) MaxNBy
此聚合合并由其他 max_n_by 聚合生成的聚合,并返回在所有聚合数据中找到的最大值及关联数据。
必填参数
名称 | 类型 | 描述 |
---|---|---|
agg | MaxNBy | 正在合并的聚合 |
返回
列 | 类型 | 描述 |
---|---|---|
rollup | MaxNBy | 所有贡献值的聚合。 |
此示例假定您有一个以下格式的股票交易表
CREATE TABLE stock_sales(ts TIMESTAMPTZ,symbol TEXT,price FLOAT,volume INT);
查找表中 10 笔最大的交易,它们发生的时间以及交易的符号
SELECT(data).time,(data).symbol,value AS transactionFROMinto_values((SELECT max_n_by(price * volume, stock_sales, 10)FROM stock_sales),NULL::stock_sales);
关键词
在此页面上发现问题?报告问题 或 在 GitHub 上编辑此页面
。