[SQL ] Group by的意義
資料庫名稱: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
11/06 23:09, 2F
→
11/06 23:10,
5年前
, 3F
11/06 23:10, 3F
推
11/07 11:17,
5年前
, 4F
11/07 11:17, 4F
推
03/27 21:43,
5年前
, 5F
03/27 21:43, 5F
→
03/27 21:43,
5年前
, 6F
03/27 21:43, 6F
Database 近期熱門文章
PTT數位生活區 即時熱門文章