2017-03-03 82 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'。 –