一.OVER()
描述
OVER()的意思就是所有的数据都在窗口中
实例
- OVER() 意思是所有的数据都在窗口中
# 计算所有员工的平均工资
SELECT
*,
avg(salary) OVER ()
FROM employee;
- OVER()用于将当前行与一个聚合值进行比较
# 计算员工与平均薪水之差
SELECT
*,
salary - avg(salary) OVER () as diffent
FROM
employee;
- OVER()和COUNT()组合
# 计算所有部门数量
SELECT
*,
count(id) OVER ()
FROM
department;
- 一句SQL中使用两个窗口函数
# 在purchase表基础上,添加平均价格和采购总金额两列
SELECT
*,
avg(price) OVER (),
sum(price) OVER ()
FROM purchase;
- 窗口函数在WHERE`子句后执行
# 查询部门id为1,2,3三个部门员工的姓名,薪水,和这三个部门员工的平均薪资
SELECT
first_name,
last_name,
salary,
avg(salary) OVER ()
FROM
employee
WHERE department_id
IN (1, 2, 3)
ORDER BY department_id;
- 在过滤条件中不能使用OVER()
# 查询所有员工中,薪资高于平均薪资的员工
SELECT
*,
AVG(salary) OVER ()
FROM employee
WHERE salary > AVG(salary) OVER ();