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

自增行号函数

  • 按照值排序时产生一个自增行号,不会重复。针对相同数据,先查出的排名在前,没有重复值
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被直接跳过了。排名存在重复值。
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名。
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

窗口计数函数

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─┐
│ 01 │
│ 12 │
│ 23 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 31 │
│ 42 │
│ 53 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 61 │
│ 72 │
│ 83 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 91 │
└───┴─────┘

窗口最大值函数

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─┐
│ 22 │
│ 12 │
│ 02 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 55 │
│ 45 │
│ 35 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 88 │
│ 78 │
│ 68 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 99 │
└───┴─────┘

窗口最小值函数

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─┐
│ 00 │
│ 10 │
│ 20 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 33 │
│ 43 │
│ 53 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 66 │
│ 76 │
│ 86 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 99 │
└───┴─────┘

窗口平均值函数

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─┐
│ 00 │
│ 10.5 │
│ 21 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 33 │
│ 43.5 │
│ 54 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 66 │
│ 76.5 │
│ 87 │
└───┴─────┘
┌─x─┬─cnt─┐
│ 99 │
└───┴─────┘
  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一切如来心秘密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值