2017-03-03 6 views
0

クエリに余分な列を追加しようとしています。賃金給与に基づき、BELOWまたはABOVEを列に書き込む必要がありますが、機能しません。何が問題ですか?Oracle SQL CASEでエラーが発生する

caseselect句に属し
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

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'はありません。 –

関連する問題