這是以前學習數據庫查詢時從網上找的資料,都保存到本地的word文檔,現在也拿出來分享分享吧,是別人的。
-- Group By語句從英文的字面意義上理解就是“根據(by)一定的規則進行分組(Group)”。
--它的作用是通過一定的規則將一個數據集划分成若干個小的區域,然后針對若干個小區域進行數據處理。
--注意:group by 是先排序后分組;
--舉例子說明:如果要用到group by 一般用到的就是“每這個字” 例如說明現在有一個這樣的表:每個部門有多少人 就要用到分組的技術
select DepartmentID as '部門名稱',
COUNT(*) as '個數' from BasicDepartment group by DepartmentID
--這個就是使用了group by +字段進行了分組,其中我們就可以理解為我們按照了部門的名稱ID
--DepartmentID將數據集進行了分組;然后再進行各個組的統計數據分別有多少;
--如果不用count(*) 而用類似下面的語法
select DepartmentID,DepartmentName from BasicDepartment group by DepartmentID
--將會出現錯誤
--消息 8120,級別 16,狀態 1,第 1 行
--選擇列表中的列 'BasicDepartment.DepartmentName' 無效,因為該列沒有包含在聚合函數或 GROUP BY 子句中。
--這就是我們需要注意的一點,如果在返回集字段中,這些字段要么就要包含在Group By語句的后面,
--作為分組的依據;要么就要被包含在聚合函數中。
--出現的錯誤詳解:咱們看看group by 的執行的過程,先執行select 的操作返回一個程序集,
--然后去執行分組的操作,這時候他將根據group by 后面的字段
--進行分組,並且將相同的字段並稱一列數據,如果group by 后面沒有這個字段的話就要分成好多的數據。
--但是分組就只能將相同的數據分成兩列數據,而一列中又只能放入一個字段,所以那些沒有進行分組的
--數據系統不知道將數據放入哪里,所以就出現此錯誤
--目前一種分組情況只有一條記錄,一個數據格是無法放入多個數值的,
--所以這里就需要通過一定的處理將這些多值的列轉化成單值,然后將其放在對應的
--數據格中,那么完成這個步驟的就是聚合函數。這就是為什么這些函數叫聚合函數(aggregate functions)了
--group by all語法解析:
--如果使用 ALL 關鍵字,那么查詢結果將包括由 GROUP BY 子句產生的所有組,即使某些組沒有符合搜索條件的行。
--沒有 ALL 關鍵字,包含 GROUP BY 子句的 SELECT 語句將不顯示沒有符合條件的行的組。
select DepartmentID,DepartmentName as '部門名稱',
COUNT(*) as '個數' from BasicDepartment group by all DepartmentID,DepartmentName