我查了一下,在论坛上找到了一些链接,但没有一个我觉得适用于我的问题,或者似乎与我的结果相同。我需要做的就是......
如果工资超过工资平均值,则列出所有员工姓氏,名字,工资和more_employees表中的“比较列”,此列输出'高薪'否则输出'低薪'
我已经解决了这个......
SELECT first_name, last_name, salary,
CASE WHEN salary > AVG(salary) THEN 'High-Pay'
WHEN salary < AVG(salary) THEN 'Low-Pay'
ELSE 'Average' AS CompareColumn
END
FROM more_employees
我得到的错误是
&#34;不是单组组功能&#34;
所以我最后添加一个组中的任何一个列名称然后我得到
&#34;不是分组功能&#34;
所以我被困住了,现在已经有一段时间了。有什么想法吗?
答案 0 :(得分:5)
您需要计算比较的平均值。 Oracle中最简单的方法是使用分析函数:
SELECT first_name, last_name, salary,
(CASE WHEN salary > AVG(salary) OVER () THEN 'High-Pay'
WHEN salary < AVG(salary) OVER () THEN 'Low-Pay'
ELSE 'Average'
END) AS CompareColumn
FROM more_employees ;
as
也会追踪end
的{{1}}。
答案 1 :(得分:1)
计算平均工资(例如使用CTE),然后在分类查询中使用它:
WITH cteSalary AS
(
SELECT AVG(salary) as avgSalary
FROM more_employees
)
SELECT
e.first_name,
e.last_name,
e.salary,
CASE
WHEN e.salary > s.avgSalary THEN 'High-Pay'
WHEN e.salary < s.avgSalary THEN 'Low-Pay'
ELSE 'Average'
END AS CompareColumn
FROM more_employees e CROSS JOIN cteSalary s;