2017-03-03 81 views
0

我试图给我的查询添加一个额外的列。根据平均工资水平,它应该写入BELOW或ABOVE到列中,但不起作用。问题是什么?Oracle SQL CASE给出错误

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

这将有助于说*它会给你什么*错误。但[你不能在'where子句]中使用聚合(http://stackoverflow.com/q/42470849/266304)。 –

回答

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; 
+0

谢谢,这正是我想要的。你能解释一下“你有一个聚合函数但没有聚合”是什么意思吗? – dmbdnr

+0

@dmbdnr。 。 。你的查询使用'avg()' - 连同其他列 - 但没有'group by'。 –