[SQL ] Group by的意義

看板Database (資料庫)作者 (你們看是小波耶!!!)時間5年前 (2019/11/06 20:25), 編輯推噓3(303)
留言6則, 3人參與, 5年前最新討論串1/1
資料庫名稱: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;(對) ---------------------------- 上面那個例1講到,ename對sex是多對1,導致輸出時會無法決定要輸出的值,而例2 則是讓讓資料依性別(男或女)group起來,然後再對這兩個group取出ename最大值。 ename最大值和性別會是1比1的關係,這樣輸出時就可以順利輸出了。 我目前是這樣理解,但我總覺得對於group by意義的解釋,似乎哪裡怪怪的不通順 但是又想不出來。請問有人能幫忙解釋一下group by邏輯上的意義嗎? 拜託不要說「因為不這樣寫會跳錯」...... -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.167.52.45 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1573043113.A.4A5.html

11/06 23:07, 5年前 , 1F
就分組啊
11/06 23:07, 1F

11/06 23:09, 5年前 , 2F
不用group by就是不分組,看全部的count,sum...
11/06 23:09, 2F

11/06 23:10, 5年前 , 3F
group by sex(gender)就是看男女的count,sum...
11/06 23:10, 3F

11/07 11:17, 5年前 , 4F
你的理解是對的喔!
11/07 11:17, 4F

03/27 21:43, 5年前 , 5F
我的解釋,一群男人和一群女人分開比大小(你看,我的ena
03/27 21:43, 5F

03/27 21:43, 5年前 , 6F
me比較大~)
03/27 21:43, 6F
文章代碼(AID): #1TmhkfIb (Database)
文章代碼(AID): #1TmhkfIb (Database)