max_n()函数
工具包TimescaleDB 工具包函数可在 Timescale 社区版中使用。它们会自动包含在 Timescale 中,但必须为自托管的 TimescaleDB 单独安装。点击了解更多。简介
从列中获取 N 个最大值。
max_n()
函数提供与常规 SQL 查询 SELECT ... ORDER BY ... LIMIT n
相同的结果。但与 SQL 查询不同的是,它们可以像其他聚合超级函数一样组合和合并。
要获取 N 个最小值,请使用 min_n()
。要获取 N 个最大值及其伴随数据,请使用 max_n_by()
.
相关超级函数组
聚合
- max_n
- 在数据集中找到最大的值
访问器
- into_array
- 返回 MaxN 聚合中的最高值数组
- into_values
- 返回 MaxN 聚合中的最高值
汇总
- rollup
- 合并多个 MaxN 聚合
max_n(value BIGINT | DOUBLE PRECISION | TIMESTAMPTZ,capacity BIGINT) MaxN
构造一个聚合,它将跟踪传递给它的最大值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
value | BIGINT , DOUBLE PRECISION , TIMESTAMPTZ | 传递到聚合的值 |
capacity | BIGINT | 要保留的值的数量。 |
返回
列 | 类型 | 描述 |
---|---|---|
max_n | MaxN | 已编译的聚合。请注意,确切的类型将根据输入类型为 MaxInts 、MaxFloats 或 MaxTimes |
into_array (agg MaxN) BIGINT[] | DOUBLE PRECISION[] | TIMESTAMPTZ[]
返回聚合所见到的 N 个最大值。这些值按降序格式化为数组。
必需参数
名称 | 类型 | 描述 |
---|---|---|
agg | MaxN | 要返回结果的聚合。请注意,这里的确切类型根据存储在聚合中的数据类型而异。 |
返回
列 | 类型 | 描述 |
---|---|---|
into_array | BIGINT[] , DOUBLE PRECISION[] , TIMESTAMPTZ[] | 创建此聚合时所见的最大值。 |
示例
查找 i * 13 % 10007
(i = 1 到 10000)中的前 5 个值
SELECT into_array(max_n(sub.val, 5))FROM (SELECT (i * 13) % 10007 AS valFROM generate_series(1,10000) as i) sub;
into_array---------------------------------{10006,10005,10004,10003,10002}
into_values (agg MaxN) SETOF BIGINT | SETOF DOUBLE PRECISION | SETOF TIMESTAMPTZ
返回聚合所见到的 N 个最大值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
agg | MaxN | 要返回结果的聚合。请注意,这里的确切类型根据存储的数据类型而异。 |
返回
列 | 类型 | 描述 |
---|---|---|
into_values | SETOF BIGINT , SETOF DOUBLE PRECISION , SETOF TIMESTAMPTZ | 创建此聚合时所见的最大值。 |
示例
查找 i * 13 % 10007
(i = 1 到 10000)中的前 5 个值
SELECT into_values(max_n(sub.val, 5))FROM (SELECT (i * 13) % 10007 AS valFROM generate_series(1,10000) as i) sub;
into_values-------------1000610005100041000310002
rollup(agg MaxN) MaxN
此聚合将合并由其他 max_n
聚合生成的聚合。与访问器结合使用时,它将返回所有聚合数据的最大值。
必需参数
名称 | 类型 | 描述 |
---|---|---|
agg | MaxN | 要合并的聚合 |
返回
列 | 类型 | 描述 |
---|---|---|
rollup | MaxN | 所有贡献值的聚合。 |
此示例假设您有一个股票交易表,其格式如下
CREATE TABLE stock_sales(ts TIMESTAMPTZ,symbol TEXT,price FLOAT,volume INT);
您可以查询每天的 10 笔最大交易
WITH t as (SELECTtime_bucket('1 day'::interval, ts) as day,max_n(price * volume, 10) AS daily_maxFROM stock_salesGROUP BY time_bucket('1 day'::interval, ts))SELECTday, as_array(daily_max)FROM t;
关键词
在本页面上发现问题了吗?报告问题 或 在 GitHub 上编辑此页面.