SQL語句中的Group By

2021-08-22 09:49:59 字數 1664 閱讀 8171

先來看下表1,表名為測試:

表1執行如下sql語句:

selectnamefromtest

groupbyname

你應該很容易知道執行的結果,沒錯,就是下表2:

表2

可是為了能夠更好的理解「group by」多個列「」聚合函式「的應用,我建議在思考的過程中,由表1到表2的過程中,增加乙個虛構的中間表:虛擬表3.下面說說如何來思考上面sql語句執**況:

1.from測試:該句執行後,應該結果和表1一樣,就是原來的表。

2.from測試組by名稱:該句執行後,我們想象生成了虛擬表3,如下所圖所示,生成過程是這樣的:group by name,那麼找name那一列,具有相同名值的行,合併成一行,如對於名值為aa的,那麼<1 aa 2>與<2 aa 3>兩行合併成1行,所有的id值和數值寫到乙個單元格裡面。

3.就要接下來針對虛擬表3執行選擇語句了:

(1)如果執行select *的話,那麼返回的結果應該是虛擬表3,可是id和數中有的單元格裡面的內容是多個值的,而關聯式資料庫就是基於關係的,單元格中是不允許有多個值的,所以你看,執行select *語句就報錯了。

(2)我們再看名列,每個單元格只有乙個資料,所以我們選擇名稱的話,就沒有問題了。為什麼名稱列每個單元格只有乙個值呢,因為我們就是用名列出來的。

(3)那麼對於id和號碼裡面的單元格有多個資料的情況怎麼辦呢?就是答案用聚合函式,聚合函式就用來輸入多個資料,輸出乙個資料的。如cout(id),和(數),而每個聚合函式的輸入就是每乙個多資料的單元格。

(4)例如我們執行選擇名稱,來自測試組的總和(數字)名稱,那麼總和就虛擬表3的數字列的每個單元格進行sum操作,例如對名稱為aa的那一行的數字列執行綜上所述操作,即2 + 3,返回圖5,最後執行結果如下:

(5)group by多個欄位該怎麼理解呢:如group by name,number,我們可以把名稱和數字看成乙個整體字段,以他們整體來進行分組的。如下圖

(6)接下來就可以配合選擇和聚合函式進行操作了。如執行選擇名稱,來自測試組的總和(id)按名稱,數字,結果如下圖:

Sql語句中group by 子句的規則

group by 是分組查詢,一般 group by 是和聚合函式配合使用 group by 有乙個原則,就是 select 後面的所有列中,沒有使用聚合函式的列,必須都出現在 group by 後面 重要 例如,有如下資料庫表 a b 1 abc 1 bcd 1 asdfg 如果有如下查詢語句 該...

Sql語句中的DDL語句

資料庫模式定義語言ddl data definition language 是用於描述資料庫中要儲存的現實世界實體的語言。主要由create 新增 alter 修改 drop 刪除 和 truncate 刪除 四個關鍵字完成。create database 資料庫名 建立乙個資料庫 create d...

sql查詢語句中

sql查詢語句中select t.status,t.rowid from person t where t.status 2,此處查詢的是status不等於2的記錄,並過濾掉status為null的記錄。注意 此處不管status是integer型別還是long型別,都會過濾掉status為null...