資料庫名稱:Oracle
資料庫版本:
內容/問題描述:Oracle的group by語法,有個規定是若在select語句某個欄位使用
聚合函數(例如sum count avg max min),那麼表格其他欄位就需要被加到
group by子句裡,例如以下網頁某段敘述:
https://bit.ly/2WXTihj
如果查詢中包含一個聚合函數,而所選擇的列不在聚合函數中,那麽這些列就必須
出現在GROUP BY子句中.(不用聚合函數的列必須出現在group by後)
不這樣做的話,會出現ORA-00937: 不是一個單一群體的群體函數
那我請問在group by子句加上其他列,這樣做在邏輯上的意義可以解釋成以下這樣嗎:
因為使用了聚合函數,就相當於是將多個列的值濃縮成一個值,例如
max就是從多個列中取最大值;min就是取最小值;sum就是取出列所有值的總和這一個值。
那麼為了讓這些值可以和其他欄位保持1:1的關係,所以必須要將其他列給group by起來,
例如同一個網頁的另一段敘述:
例1 :select ename,sex from emp group by sex;
(錯,ename沒有用聚合函數,也沒有出現在group by後面,因為將sex分成兩組,
但ename有很多,到底輸出那個ename呢?)
例2: select max(ename),sex from emp group by sex;(對)