Aug 22, 2024
RANK
DENSE_RANK
ROW_NUMBER
LEAD
LAG
SELECT MAX(salary) AS max_salary FROM employee;
SELECT MAX(salary) AS max_salary FROM employee GROUP BY department_name;
SELECT e.*, MAX(salary) OVER() AS max_salary FROM employee AS e;
SELECT e.*, MAX(salary) OVER(PARTITION BY department_name) AS max_salary FROM employee AS e;
SELECT e.*, ROW_NUMBER() OVER() AS rn FROM employee AS e;
SELECT e.*, ROW_NUMBER() OVER(PARTITION BY department_name ORDER BY employee_id) AS rn FROM employee AS e;
SELECT e.*, RANK() OVER(PARTITION BY department_name ORDER BY salary DESC) AS rnk FROM employee AS e;
SELECT * FROM (SELECT e.*, RANK() OVER(PARTITION BY department_name ORDER BY salary DESC) AS rnk FROM employee AS e) AS x WHERE rnk < 4;
SELECT e.*, DENSE_RANK() OVER(PARTITION BY department_name ORDER BY salary DESC) AS d_rnk FROM employee AS e;
LAG
: fetches previous record's value:
SELECT e.*, LAG(salary) OVER(PARTITION BY department_name ORDER BY employee_id) AS previous_salary FROM employee AS e;
LEAD
: fetches next record's value:
SELECT e.*, LEAD(salary) OVER(PARTITION BY department_name ORDER BY employee_id) AS next_salary FROM employee AS e;
SELECT e.*, CASE WHEN salary > LAG(salary) OVER(...) THEN 'Higher' WHEN salary < LAG(salary) OVER(...) THEN 'Lower' ELSE 'Same' END AS salary_comparison FROM employee AS e;
nth_value
, first_value
, etc.).