我有下面的例子:GROUP BY功能問題
SELECT name, age, location, SUM(pay)
FROM employee
GROUP BY location
這種預期會給我一個錯誤:
ORA-00979: not a GROUP BY expression
我怎樣才能解決這個得到什麼?我需要組成一個或許兩列,但需要返回所有列,即使它們不在GROUP BY子句中使用,我已經查看了子查詢以避開它,但目前爲止沒有運氣。
我有下面的例子:GROUP BY功能問題
SELECT name, age, location, SUM(pay)
FROM employee
GROUP BY location
這種預期會給我一個錯誤:
ORA-00979: not a GROUP BY expression
我怎樣才能解決這個得到什麼?我需要組成一個或許兩列,但需要返回所有列,即使它們不在GROUP BY子句中使用,我已經查看了子查詢以避開它,但目前爲止沒有運氣。
因此,您想了解按地點劃分的總工資情況,並且您想知道每個地點的員工姓名和年齡?如何:
SELECT e.NAME,
e.AGE,
e.LOCATION,
t.TOTAL_LOCATION_PAY
FROM EMPLOYEE e
INNER JOIN (SELECT LOCATION,
SUM(PAY) AS TOTAL_LOCATION_PAY
FROM EMPLOYEE
GROUP BY LOCATION) t
ON (t.LOCATION = e.LOCATION)
分享和享受。
你好,請閱讀我的答案。 – Roger 2013-03-22 12:35:58
您可以使用分析功能:
SELECT name
, age
, location
, pay
, SUM(pay) over (partition by location order by location) total
FROM employee
所以,你可以返回,即使他們沒有在分組中使用的所有行。
+1。 。 。這是更好的方法。 – 2013-03-22 14:27:07
(Group b [http://docs.oracle.com/javadb/10.6.2.1/ref/rrefsqlj32654.html]每個不在group by子句中的列中必須有一個聚合函數。分組意味着你想每組有一行,子句中列的不同值出現在最終結果集中
這是因爲oracle無法知道列中哪些值沒有有組通過檢索在考慮這個:?
A X
B X
Select col1, col2 from myTable group by col2; -- incorrect
Select min(col1), col2 from myTable group by col2; -- correct
爲什麼第一不正確的,因爲Oracle不知道是否檢索A或B的X值,你必須SPECI fy it。即MIN,MAX等。
這個命名的分析函數有一個替代方案,它允許你在結果集的窗口下工作。
現在,如果您希望員工按地點支付總工資,並且每個員工都可能需要這樣。
SELECT name, age, location, SUM(pay) OVER(PARTITION BY location)
FROM employee
我相信這比@Bob Jarvis查詢更好,因爲您只查詢表格一次。如果我錯了,請糾正我。他還有員工和員工。錯字?
錯字。糾正。謝謝。 – 2013-03-22 13:11:10
你在這裏使用GROUP BY是什麼? – 2013-03-22 11:12:18
請提及輸入和所需的輸出。 – 2013-03-22 11:14:05
對於每個分組的「位置」,您希望從其他列'name,age,pay'返回哪些值?請張貼一些示例數據和期望的輸出? – 2013-03-22 11:14:12