超級簡單理解group by

2021-10-17 12:40:47 字數 3134 閱讀 9383

公司的實習生小夥子不理解group by,我就發表一下自己的拙見,順便當作筆記,日後常加翻閱。

記住下面三句話即可!

1、分組的作用就是為了做聚合,不聚合的分組有什麼意義呢!

2、分組的select中「如果存在」字段,那麼select中的字段必須和分組條件中的字段「完全一致」,否則查詢出來的結果沒有意義!

3、分組的聚合函式的引數可以是任何內容,不一定必須是分組條件中的字段!

-- 例子

mysql>

select

*from tb_user;

+----+------+--------+--------+

| id | name | gender |

status|+

----+------+--------+--------+|1

| 張三 | 男 |1|

|2| 李四 | 女 |1|

|3| 王五 | 男 |0|

|4| 趙六 | 女 |1|

|5| 田七 | 男 |0|

+----+------+--------+--------+

-- 查詢結果沒有意義

mysql>

select

*from tb_user group

by gender;

+----+------+--------+--------+

| id | name | gender |

status|+

----+------+--------+--------+|2

| 李四 | 女 |1|

|1| 張三 | 男 |1|

+----+------+--------+--------+

-- 這麼寫是有一點意義的。就是可以看出gender欄位的取值有幾種,意義不大。

mysql>

select gender from tb_user group

by gender;

+--------+

| gender |

+--------+

| 女 |

| 男 |

+--------+

-- 查詢結果沒有意義

mysql>

select gender,

status

from tb_user group

by gender,

status;+

--------+--------+

| gender |

status|+

--------+--------+

| 女 |1|

| 男 |0|

| 男 |1|

+--------+--------+

-- 分組和聚合函式配合才有意義,下面是典型的分組查詢

mysql>

select gender,

count(1

)from tb_user group

by gender;

+--------+----------+

| gender |

count(1

)|+--------+----------+

| 女 |2|

| 男 |3|

+--------+----------+

-- select中沒有group by後面的字段,查詢結果無意義

mysql>

select

`name`

from tb_user group

by gender;

+------+

| name |

+------+

| 李四 |

| 張三 |

+------+

-- 這尼瑪還是沒有意義

mysql>

select

`name`

,gender from tb_user group

by gender;

+------+--------+

| name | gender |

+------+--------+

| 李四 | 女 |

| 張三 | 男 |

+------+--------+

-- select後面如果有欄位,就必須和group by後面的字段完全一致。下面不一致,查詢結果沒有意義。

-- 下面的count()函式的引數不用非得寫為gender,因為count()計算的是每組的所有記錄。

-- group by是將乙個表拆分成多個表,聚合函式是將多條記錄合併成一條結果集。因此分組之後count(),就計算出了每組一共多少條記錄。

mysql>

select

`name`

,gender,

count(1

)from tb_user group

by gender;

+------+--------+----------+

| name | gender |

count(1

)|+------+--------+----------+

| 李四 | 女 |2|

| 張三 | 男 |3|

+------+--------+----------+

-- 下面是乙個典型的分組語句。

-- select後面「如果有」字段,那麼必須和group by的字段「完全一致」。

-- 分組的聚合函式中可以寫任何內容,就當作一張完整的小表來進行聚合即可。

-- 見下圖。

mysql>

select gender,

count(1

)from tb_user group

by gender;

+--------+----------+

| gender |

count(1

)|+--------+----------+

| 女 |2|

| 男 |3|

+--------+----------+

如何理解group by

寫在前面的話 用了好久group by,今天早上一覺醒來,突然感覺group by好陌生,總有個筋別不過來,為什麼不能夠select from table group by id,為什麼一定不能是 而是某乙個列或者某個列的聚合函式,group by 多個字段可以怎麼去很好的理解呢?不過最後還是轉過來...

理解group by(小示例)

group by 是分組查詢,一般 group by 是和 聚合函式配合使用,你可以想想 用了group by 按 item.itemnum 這個字段分組,那其他字段內容不同,變成一對多又改如何顯示呢,比如下面所示 a b 1 abc 1 bcd 1 asdfg select a,b from ta...

理解GROUP BY和聚合函式

先來看下表1,表名為test 表1執行如下sql語句 selectnamefromtest groupbyname 你應該很容易知道執行的結果,沒錯,就是下表2 表2可是為了能夠更好的理解 group by 多個列 和 聚合函式 的應用,我建議在思考的過程中,由表1到表2的過程中,增加乙個虛構的中間...