Oracle SQL CASE给出错误

时间:2017-03-03 12:27:56

标签: sql oracle11g

我正在尝试在查询中添加一个额外的列。根据avarage薪水,它应写入BELOW或ABOVE列,但它不起作用。有什么问题?

SELECT CONCAT(firstname, lastname) AS name
FROM workers
CASE
  WHEN salary < avg(salary) THEN 'BELOW'
  WHEN salary > avg(salary) THEN 'ABOVE'
  ELSE 'AVARAGE'
END;

1 个答案:

答案 0 :(得分:1)

case属于select子句:

SELECT CONCAT(firstname, lastname) AS name
       (CASE WHEN salary < avg(salary) THEN 'BELOW'
             WHEN salary > avg(salary) THEN 'ABOVE'
             ELSE 'AVERAGE'
        END)
FROM workers;

这解决了第一个问题。下一个问题是您有聚合函数但没有聚合。你真正想要的是一个分析函数:

SELECT CONCAT(firstname, lastname) AS name
       (CASE WHEN salary < AVG(salary) OVER () THEN 'BELOW'
             WHEN salary > AVG(salary) OVER () THEN 'ABOVE'
             ELSE 'AVERAGE'
        END)
FROM workers;