页面树结构
转至元数据结尾
转至元数据起始

1、函数说明


函数名称描述
1

first(expr[, isIgnoreNull]),

first_value(expr[, isIgnoreNull])

函数说明:返回第一个值,返回一组行的expr的第一个值。如果isIgnoreNull为true,则仅返回非null值

用法用法:同下

2

last(expr[, isIgnoreNull])

last_value(expr[, isIgnoreNull])

函数说明:返回最后一个值,返回一组行的expr的最后一个值。如果isIgnoreNull为true,则仅返回非null值

用法:

last(column_name) OVER (PARTITION BY partition_expression ORDER BY sort_expression)

其中,column_name是要获取最后一条记录的列名,partition_expression是窗口的分区表达式,sort_expression是用于排序的表达式。

示例
 SELECT date, sales, last(date) OVER (PARTITION BY sales_department ORDER BY date) AS last_sale_date FROM sales;


last_value(column_name) OVER (PARTITION BY partition_expression)

last_value()函数用于获取窗口中每个组的最后一个值。它需要指定一个列作为聚合函数,并且不需要指定排序规则。

示例
SELECT employee_id, department, last_value(salary) OVER (PARTITION BY department) AS max_salary FROM employee;
3

lag(input[, offset[, default]]),


函数说明:返回偏移前面的值。返回窗口中当前行之前的第二行的输入值。偏移量的默认值为1,默认值为null。如果offseth行的input值为null,则返回null。如果没有这样的偏移行(例如,当偏移为1时,窗口的第一行没有任何前一行),则返回默认值。

用法:

LAG(A)  OVER (PARTITION BY  <B> ORDER BY <A>

示例
SELECT `CustomerID` as `客户名称`,`OrderDate` as `订单日期`,Lag(`OrderDate` ) OVER (PARTITION BY `CustomerID` ORDER BY `OrderDate` ) AS `上次订单日期` FROM orders ;

说明:通过使用Lag函数和PARTITION BY子句,我们可以按照客户ID对订单进行分组,并计算每个分组中上一个订单的日期。这样我们可以轻松地找到每个客户上一个订单的日期。

4lead(input[, offset[, default]]),

函数说明:返回窗口中当前行之后第二行的输入值。偏移量的默认值为1,默认值为null。如果offseth行的input值为null,则返回null。如果没有这样的偏移行(例如,当偏移为1时,窗口的最后一行没有任何后续行),则返回默认值。

用法:LEAD(A)  OVER (PARTITION BY  <B> ORDER BY <A>

示例
SELECT `EmployeeID` , `DepartmentID` , `Salary` ,Lead(`Salary` ) OVER (PARTITION BY `DepartmentID` ORDER BY `Salary` ) AS NextSalary FROM Employees; 

通过使用Lead函数和PARTITION BY子句,我们可以按照部门ID对员工进行分组,并计算每个分组中下一个员工的薪水。这样我们可以轻松地找到每个部门中下一个员工的薪水。

5

rank()

函数说明:计算值的排名。在 SQL 中,RANK() 函数用于在查询结果中为每一行分配一个排名值。它通常与 OVER 子句一起使用,以便在指定的窗口范围内对数据进行排名。

用法:RANK() OVER (PARTITION BY partition_expression ORDER BY sort_expression)

  • RANK():指定要使用 RANK() 函数进行排名。
  • OVER:关键字指示后续的子句是定义窗口的。
  • PARTITION BY:指定将数据分割为多个分区,每个分区内部进行排名的分区键。如果未指定分区键,则默认为整个结果集。
  • sort_expression:指定排名的排序规则,即按照哪个列或表达式进行排序。
示例
SELECT employee_id, last_name, RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) AS rank FROM employees;

上述查询将返回一个结果集,其中包含员工ID、姓氏和他们在各自部门中的薪水排名。

6

row_number()

函数说明:为结果集中的每一行分配一个唯一的行号。在Spark SQL中,row_number()函数用于为结果集中的每一行分配一个唯一的行号。它通常与OVER子句一起使用,以便在指定的窗口范围内对数据进行行号分配。

用法row_number() OVER (PARTITION BY partition_expression ORDER BY sort_expression)

  • row_number():指定要使用row_number()函数进行行号分配。
  • OVER:关键字指示后续的子句是定义窗口的。
  • PARTITION BY:指定将数据分割为多个分区,每个分区内部进行行号分配的分区键。如果未指定分区键,则默认为整个结果集。
  • sort_expression:指定行号分配的排序规则,即按照哪个列或表达式进行排序
示例
SELECT employee_id, last_name, row_number() OVER (PARTITION BY department_id ORDER BY salary DESC) AS row_num  FROM employees;

上述查询将返回一个结果集,其中包含员工ID、姓氏和他们在各自部门中按照薪水降序排列的行号。



  • 无标签