使用windows函数和子查询比较sql查询的效率
我想了解我的查询是否正确,以及它是否比第一次查询有效 编写一个查询以显示员工id、名字和姓氏、SalaryDrawed、AvgCompare(工资-所有员工的平均工资)和SalaryStatus列,其中,对于那些工资高于和低于所有员工平均工资的员工,标题分别为HIGH和LOW 示例员工表: 员工|姓名|姓氏|工资|经理|部门| ID| 第一个问题使用windows函数和子查询比较sql查询的效率,sql,sql-server,query-optimization,Sql,Sql Server,Query Optimization,我想了解我的查询是否正确,以及它是否比第一次查询有效 编写一个查询以显示员工id、名字和姓氏、SalaryDrawed、AvgCompare(工资-所有员工的平均工资)和SalaryStatus列,其中,对于那些工资高于和低于所有员工平均工资的员工,标题分别为HIGH和LOW 示例员工表: 员工|姓名|姓氏|工资|经理|部门| ID| 第一个问题 SELECT employee_id, first_name, last_name, salary AS SalaryDrawn, ROUN
SELECT employee_id, first_name, last_name, salary AS SalaryDrawn,
ROUND((salary -(SELECT AVG(salary) FROM employees)),2) AS AvgCompare,
CASE WHEN salary >=
(SELECT AVG(salary)
FROM employees) THEN 'HIGH'
ELSE 'LOW'
END AS SalaryStatus
FROM employees;
使用CTE和windows功能的我的答案:
WITH cte AS
(SELECT employee_id, first_name, last_name, salary,
ROUND(AVG(Salary) OVER (),2) AS avgSal
FROM employees)
Select employee_id, first_name, last_name, salary, ROUND((e.salary - avgSal ,2) AS AvgCompare,
CASE WHEN salary >= avgSal THEN 'HIGH'
ELSE 'LOW'
END AS SalaryStatus
FROM cte
我想知道我的问题是否正确
创建一些示例数据和预期结果。运行查询并进行比较
如果它比第一次查询有效呢
看一看资源的使用情况
是查看查询资源利用率的简单方法。看起来正确。是的,更多efficient@Charlieface你介意解释一下原因吗?这是因为在第一个查询中,子查询将为每一行计算,这就是为什么第二个查询更高效的原因吗?我不一定说它将为每一行计算,但通常是这样。但编译器通常会将其排列为假脱机,并保存预先计算的值。但是你仍然需要扫描表3次而不是一次。