我有這樣的代碼:發現價值
SELECT username, first_name, last_name, NVL(salary,0) "salary"
FROM customer
WHERE NVL(salary,0) < AVG(NVL(salary, 0));
試圖找出哪些用戶擁有低於平均工資和一個用戶沒有工資(「零」我必須轉換爲0 )。
最後一句「avg(nvl(salary,0))」不起作用,我不能爲了我的生活找出原因。如果我用一般的實際數字代替陳述,那麼一切正常。
我有這樣的代碼:發現價值
SELECT username, first_name, last_name, NVL(salary,0) "salary"
FROM customer
WHERE NVL(salary,0) < AVG(NVL(salary, 0));
試圖找出哪些用戶擁有低於平均工資和一個用戶沒有工資(「零」我必須轉換爲0 )。
最後一句「avg(nvl(salary,0))」不起作用,我不能爲了我的生活找出原因。如果我用一般的實際數字代替陳述,那麼一切正常。
你可以試着預先選擇的平均水平:
select username,first_name,last_name,nvl(salary,0) "salary"
from customer
where nvl(salary,0) < (select avg(nvl(salary,0)) from customer);
只能在select
和having
條款使用avg
,這就是爲什麼你有一個錯誤。
也不要使用nvl
,而是使用3210來代替,這對大數據來說應該會更快。
SELECT username,first_name,last_name, NVL(salary,0) "salary"
FROM customer
WHERE NVL(salary,0) < (SELECT AVG(NVL(salary,0)) FROM customer);
這很容易得到。
下面是使用分析功能的方法:
select username,
first_name,
last_name,
salary
from (select username,
first_name,
last_name,
nvl(salary,0) salary,
avg(nvl(salary,0)) over() avg_all_salaries
from customer)
where salary < avg_all_salaries
它可以很容易地也顯示所有薪水的平均值,應該是有史以來出現。
定義「不起作用」。你是否收到錯誤信息 - 如果有,它是什麼?查詢是否運行但提供了錯誤的結果? –
您需要選擇子查詢中的平均值並將此結果與實際工資進行比較 – SomeJavaGuy
我收到此錯誤消息:「00934. 00000 - 」組功能在此處不允許「」 – Mongzyy