[SQL ] Group by的意義

作者: lueichun (no anonymous)   2019-11-06 20:25:10
資料庫名稱: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;(對)
作者: criky (2501-2)   2019-11-06 23:07:00
就分組啊不用group by就是不分組,看全部的count,sum...group by sex(gender)就是看男女的count,sum...
作者: cutekid (可愛小孩子)   2019-11-07 11:17:00
你的理解是對的喔!
作者: ww90053 (Allen)   2018-03-27 21:43:00
我的解釋,一群男人和一群女人分開比大小(你看,我的ename比較大~)

Links booklink

Contact Us: admin [ a t ] ucptt.com