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