Clickhouse 窗口函数总结——Clickhouse 基础篇(九)

文章目录

自增行号函数

  • 按照值排序时产生一个自增行号,不会重复。针对相同数据,先查出的排名在前,没有重复值
sql 复制代码
SELECT 
  row_number() OVER (PARTITION BY EventDate ORDER BY cnt ASC) AS rno,
  OS,
  EventDate,
  cnt
FROM 
(
  SELECT
    OS,
    cnt,
    EventDate
  FROM 
  (
    SELECT
      EventDate,
      OS,
      uniqExact(UserID) AS cnt
    FROM tutorial.hits_v1
    GROUP BY
      EventDate, OS
  ) AS t
) AS T
limit 20

跳跃排名函数

  • 跳跃排名,值相等时会重复,会产生空位。相同数据排名相同,比如并列第1,则两行数据(这里为rank列)都标为1,下一位将是第3名,中间的2被直接跳过了。排名存在重复值。
sql 复制代码
SELECT 
  rank() OVER (PARTITION BY EventDate ORDER BY cnt ASC) AS rno,
  OS,
  EventDate,
  cnt
FROM 
(
  SELECT
    OS,
    cnt,
    EventDate
  FROM 
  (
    SELECT
      EventDate,
      OS,
      uniqExact(UserID) AS cnt
    FROM tutorial.hits_v1
    GROUP BY
      EventDate, OS
  ) AS t
) AS T
limit 20

连续排名函数

  • 连续排名,值相等时会重复,不会产生空位。比如两条并列第1,则两行数据(这里为rank列)都标为1,下一个排名将是第2名。
sql 复制代码
SELECT 
  dense_rank() OVER (PARTITION BY EventDate ORDER BY cnt ASC) AS rno,
  OS,
  EventDate,
  cnt
FROM 
(
  SELECT
    OS,
    cnt,
    EventDate
  FROM 
  (
    SELECT
      EventDate,
      OS,
      uniqExact(UserID) AS cnt
    FROM tutorial.hits_v1
    GROUP BY
      EventDate, OS
  ) AS t
) AS T
limit 20

窗口计数函数

sql 复制代码
SELECT
    number AS x,
    count() OVER (PARTITION BY intDiv(x, 3) ORDER BY x ASC) AS cnt
FROM numbers(10)
SETTINGS max_block_size = 3

Query id: dfeb20ae-1745-4496-877d-74d8aea95414

┌─x─┬─cnt─┐
│ 0 │   1 │
│ 1 │   2 │
│ 2 │   3 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 3 │   1 │
│ 4 │   2 │
│ 5 │   3 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 6 │   1 │
│ 7 │   2 │
│ 8 │   3 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 9 │   1 │
└───┴─────┘

窗口最大值函数

sql 复制代码
SELECT
    number AS x,
    max(x) OVER (PARTITION BY intDiv(x, 3) ORDER BY x DESC) AS cnt
FROM numbers(10)
SETTINGS max_block_size = 3

Query id: bdb8038f-0d2e-442b-a4fd-258787f5738f

┌─x─┬─cnt─┐
│ 2 │   2 │
│ 1 │   2 │
│ 0 │   2 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 5 │   5 │
│ 4 │   5 │
│ 3 │   5 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 8 │   8 │
│ 7 │   8 │
│ 6 │   8 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 9 │   9 │
└───┴─────┘

窗口最小值函数

sql 复制代码
SELECT
    number AS x,
    MIN(x) OVER (PARTITION BY intDiv(x, 3) ORDER BY x ASC) AS cnt
FROM numbers(10)
SETTINGS max_block_size = 3

Query id: e763ce9f-3eba-40a6-ad78-b0ae20dcfdda

┌─x─┬─cnt─┐
│ 0 │   0 │
│ 1 │   0 │
│ 2 │   0 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 3 │   3 │
│ 4 │   3 │
│ 5 │   3 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 6 │   6 │
│ 7 │   6 │
│ 8 │   6 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 9 │   9 │
└───┴─────┘

窗口平均值函数

sql 复制代码
SELECT
    number AS x,
    avg(x) OVER (PARTITION BY intDiv(x, 3) ORDER BY x ASC) AS cnt
FROM numbers(10)
SETTINGS max_block_size = 3

Query id: c9b8ab1b-8a6f-4191-a248-f8a589becb5a

┌─x─┬─cnt─┐
│ 0 │   0 │
│ 1 │ 0.5 │
│ 2 │   1 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 3 │   3 │
│ 4 │ 3.5 │
│ 5 │   4 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 6 │   6 │
│ 7 │ 6.5 │
│ 8 │   7 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 9 │   9 │
└───┴─────┘
相关推荐
SelectDB技术团队13 小时前
从 ClickHouse 迁移到 Doris:SQL 兼容、同步与验证清单
数据库·人工智能·sql·clickhouse·apache doris·selectdb·湖仓架构升级
java_logo2 天前
Docker 部署 ClickHouse Server:轻松搭建列式 OLAP 分析数据库平台
数据库·clickhouse·docker·私有化部署·olap·列式数据库·轩辕镜像
西风未眠6 天前
ClickHouse数据库引擎引起的数据丢失
数据库·clickhouse·故障
李兆龙的博客9 天前
从一到无穷大 #86:ClickHouse 收购 RunReveal——可观测性竞争进入宏观调控阶段
clickhouse
Gain_chance13 天前
大数据毕业设计实战|Data Insight Platform:用 FastAPI + ClickHouse 打造低门槛全链路数据洞察平台
大数据·数据库·clickhouse·毕业设计·fastapi
迷迭香yy16 天前
A股数据本地存储方案对比JSON、SQLite、ClickHouse、DuckDB怎么选 IG50免费开源股票数据API接口
clickhouse·sqlite·json
leisoo809716 天前
本地股票数据深度对比ClickHouse与Parquet存储方案 IG50免费开源股票数据API接口
clickhouse·开源
A.说学逗唱的Coke18 天前
【数据库专题】ClickHouse 深度实战:从列式存储原理到 PB 级海量日志与可观测性分析
数据库·clickhouse·硬件架构
吉甫作诵24 天前
阿里云 ECS 安装 ClickHouse:密码配置、目录迁移与基础调优
大数据·clickhouse
NineData25 天前
NineData Oracle 到 ClickHouse 数据迁移完整流程:结构复制、全量装载、增量同步
数据库·clickhouse·oracle·数据迁移·ninedata·增量同步·数据迁移工具