返回
看图说话,一文掌握最后 9 大 LOD 表达式
前端
2023-11-10 01:40:51
- LAG()
LAG() 函数返回指定行之前的一行或多行的数据。语法如下:
LAG(expr, offset, default)
- expr:要返回的表达式。
- offset:要返回的行数。负值表示之前,正值表示之后。
- default:如果指定的行不存在,则返回的默认值。
例如,以下查询返回每个部门中每个员工的前两名同事的姓名:
SELECT name,
LAG(name, 2, 'No colleague') AS previous_colleague_2
FROM employees
ORDER BY department_id, hire_date;
10. LEAD()
LEAD() 函数返回指定行之后的一行或多行的数据。语法如下:
LEAD(expr, offset, default)
- expr:要返回的表达式。
- offset:要返回的行数。负值表示之前,正值表示之后。
- default:如果指定的行不存在,则返回的默认值。
例如,以下查询返回每个部门中每个员工的后两名同事的姓名:
SELECT name,
LEAD(name, 2, 'No colleague') AS next_colleague_2
FROM employees
ORDER BY department_id, hire_date;
11. FIRST_VALUE()
FIRST_VALUE() 函数返回一个窗口中第一行的数据。语法如下:
FIRST_VALUE(expr) OVER (partition_by_clause order_by_clause)
- expr:要返回的表达式。
- partition_by_clause:用于对数据进行分区的分区子句。
- order_by_clause:用于对数据进行排序的排序子句。
例如,以下查询返回每个部门中第一个员工的姓名:
SELECT department_id,
FIRST_VALUE(name) OVER (PARTITION BY department_id ORDER BY hire_date) AS first_employee
FROM employees;
12. LAST_VALUE()
LAST_VALUE() 函数返回一个窗口中最后一行的数据。语法如下:
LAST_VALUE(expr) OVER (partition_by_clause order_by_clause)
- expr:要返回的表达式。
- partition_by_clause:用于对数据进行分区的分区子句。
- order_by_clause:用于对数据进行排序的排序子句。
例如,以下查询返回每个部门中最后一个员工的姓名:
SELECT department_id,
LAST_VALUE(name) OVER (PARTITION BY department_id ORDER BY hire_date) AS last_employee
FROM employees;
13. NTH_VALUE()
NTH_VALUE() 函数返回一个窗口中第 N 行的数据。语法如下:
NTH_VALUE(expr, N) OVER (partition_by_clause order_by_clause)
- expr:要返回的表达式。
- N:要返回的行数。
- partition_by_clause:用于对数据进行分区的分区子句。
- order_by_clause:用于对数据进行排序的排序子句。
例如,以下查询返回每个部门中第三个员工的姓名:
SELECT department_id,
NTH_VALUE(name, 3) OVER (PARTITION BY department_id ORDER BY hire_date) AS third_employee
FROM employees;
14. RANK()
RANK() 函数返回一个窗口中每个行的排名。语法如下:
RANK() OVER (partition_by_clause order_by_clause)
- partition_by_clause:用于对数据进行分区的分区子句。
- order_by_clause:用于对数据进行排序的排序子句。
例如,以下查询返回每个部门中每个员工的排名:
SELECT department_id,
name,
RANK() OVER (PARTITION BY department_id ORDER BY salary) AS rank
FROM employees;
15. DENSE_RANK()
DENSE_RANK() 函数返回一个窗口中每个行的密集排名。语法如下:
DENSE_RANK() OVER (partition_by_clause order_by_clause)
- partition_by_clause:用于对数据进行分区的分区子句。
- order_by_clause:用于对数据进行排序的排序子句。
DENSE_RANK() 函数与 RANK() 函数的区别在于,DENSE_RANK() 函数不会跳过相同的排名。例如,以下查询返回每个部门中每个员工的密集排名:
SELECT department_id,
name,
DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary) AS rank
FROM employees;
希望这些内容对大家有帮助。如果您有任何问题,请随时与我联系。