乘以不按预期工作的百分比

时间:2015-11-22 02:08:05

标签: sql having multiplying

我的问题是我试图列出工资低于或等于平均工资的工作人员,增加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;

现在打印:

1

而不是要求:

1

如果需要其他任何内容,我会提供,但任何帮助都会很感激,谢谢!

编辑:

SELECT staffNo, salary
FROM Staff
GROUP BY staffNo
HAVING salary <= AVG(salary * 0.5) AND salary >= AVG(salary / 0.5)
ORDER BY salary ASC;

3 个答案:

答案 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;