我的问题是我试图列出工资低于或等于平均工资的工作人员,增加50%,但也大于或等于平均工资减少50%。一直试图解决这个问题,我没有错误,但由于某种原因,它没有显示我打算展示的内容。
SELECT staffNo, salary
FROM Staff
GROUP BY staffNo
HAVING salary <= AVG(salary * 0.5) OR salary >= AVG(salary / 0.5)
ORDER BY salary ASC;
现在打印:
而不是要求:
如果需要其他任何内容,我会提供,但任何帮助都会很感激,谢谢!
编辑:
SELECT staffNo, salary
FROM Staff
GROUP BY staffNo
HAVING salary <= AVG(salary * 0.5) AND salary >= AVG(salary / 0.5)
ORDER BY salary ASC;
答案 0 :(得分:1)
我认为你的一个问题就是数学。
salary * 0.5
一半工资,salary / 0.5
双倍工资!
因此,根据您的规范,您需要HAVING salary BETWEEN AVG(salary) * 1.5 AND AVG(salary) * 0.5
。
我不是百分百肯定,但是使用AVG(salary)
而不是在AVG()
参数中进行操作将允许引擎将它们优化为单个操作。
答案 1 :(得分:0)
尝试此操作以查看两个查询之间存在哪些差异
SELECT staffNo, salary, 'lessthen' type
FROM Staff
GROUP BY staffNo
HAVING salary <= AVG(salary * 0.5)
ORDER BY salary ASC
union
SELECT staffNo, salary, 'morethen' type
FROM Staff
GROUP BY staffNo
HAVING salary >= AVG(salary / 0.5)
ORDER BY salary ASC;
答案 2 :(得分:0)
SELECT staffNo, salary
FROM Staff
GROUP BY staffNo
HAVING salary <= AVG(salary) * 1.5 OR salary >= AVG(salary) / 2.0
ORDER BY salary ASC;