在 Flink SQL 中,是通过 OVER 聚合和一个条件筛选来实现 Top N 的。。。怎么理解。。
时间: 2023-08-18 14:05:02 浏览: 149
在ORACLE中SELECT TOP N的实现方法
在 Flink SQL 中,可以使用 OVER 聚合和条件筛选来实现 Top N 的功能。
首先,OVER 聚合是指在一个窗口内对整个数据集进行聚合操作,而不是仅聚合每个分组。可以使用 OVER() 子句来指定 OVER 聚合,比如:
```
SELECT word, count(*) OVER() as cnt
FROM words
```
其中,`count(*) OVER()` 会对整个数据集进行计数。
然后,可以在 OVER 聚合的基础上使用条件筛选来获取 Top N 数据。比如,要获取前 10 个出现次数最多的单词,可以这样写:
```
SELECT word, cnt
FROM (
SELECT word, count(*) OVER() as cnt
FROM words
) WHERE row_number() OVER (ORDER BY cnt DESC) <= 10
```
其中,`row_number() OVER (ORDER BY cnt DESC)` 会根据 cnt 字段降序排序,然后为每一行分配一个序号,最后通过条件筛选保留前 10 行数据。
也可以使用其他聚合函数,比如 SUM()、AVG() 等等,来实现不同的 Top N 功能。
阅读全文