trino中的窗口函数
Trino (之前称为 PrestoSQL) 是一个分布式 SQL 查询引擎,用于大数据。Trino 支持标准的 SQL 窗口函数,这些函数允许用户对一组相关的行执行计算,这些行基于某个“窗口”定义。
以下是一些常见的 Trino 窗口函数及其基本用法:
1. ROW_NUMBER()
为每一行分配一个唯一的序号。
```sql
SELECT name, score, ROW_NUMBER() OVER (ORDER BY score DESC) as rank
FROM students;
```
2. RANK()
为每一行分配一个唯一的排名,当值相同时会跳过某些排名。
```sql
SELECT name, score, RANK() OVER (ORDER BY score DESC) as rank
FROM students;
```
3. DENSE_RANK()
与 RANK() 类似,但不会跳过任何排名。
```sql
SELECT name, score, DENSE_RANK() OVER (ORDER BY score DESC) as rank
FROM students;
```
4. LAG() 和 LEAD()
访问前一行或后一行的值。
```sql
rank函数怎么用SELECT name, score, LAG(score) OVER (ORDER BY score) as prev_score, LEAD(score) OVER (ORDER BY score) as next_score
FROM students;
```
5. FIRST_VALUE(), LAST_VALUE(), NTH_VALUE()
访问窗口中的第一或最后一个值,或访问特定位置的值。
6. SUM(), AVG(), MIN(), MAX() 等聚合函数也可以与 `OVER()` 子句结合使用,以在特定的窗口上执行聚合。
7. NTILE(n)
将窗口中的行分成大致相等的 n 个部分,并为每一行分配一个桶号。
8. CUME_DIST(), NTH_RANK(), LEAST_RANK(), GREATEST_RANK(), ... 等等
更多的窗口函数可以用来执行各种计算和分组操作。
使用窗口函数时,通常需要与 `OVER()` 子句一起使用,该子句定义了行的分组和排序方式(即窗口的定义)。例如:
`OVER (PARTITION BY department ORDER BY hire_date)` 会根据部门对行进行分组,并在每个部门内按雇佣日期排序。
`OVER ()` 不指定任何分区或排序,这意味着结果将包含所有行。
希望这可以帮到你!如果你有任何具体的问题或示例,我会很乐意帮助你解答。
发布评论