上篇文章介紹mysql的增刪改查操做,這篇將介紹group和order by操做。html
mysql之建立數據庫,建立數據表mysql
mysql之select,insert,delete,updatesql
group by數據庫
顧名思義,是按照哪一個字段分組,好比按照名字分組,則是全部名字相同的分爲一組。在一些計數及求和中用到最多。函數
還以上篇文章的學生信息表爲例。post
1.求出每一個年齡階段的學生的個數。url
use school; -- 求出每一個年齡階段的學生個數 select * from tb_student; select age,count(age) from tb_student group by Age;
分組結果spa
由上面的tb_student表能夠看出,23歲的學生有兩名,而其餘年齡階段的各有一名。code
在分組的時候,你能夠輸出計數結果,但若是你若是想輸出其餘的信息,好比輸出名字,這樣作是沒有意義的。由於只會輸出一個,例如:htm
select `name`,age,count(age) from tb_student group by Age;
雖然沒有報錯,可是這樣的統計,並不能讓人信服。由於23歲的學生有兩名:麻子和孫悟空。
因此,group by大都和聚合函數配合函數一塊兒使用,聚合聚合,顧名思義就是,將多個結果合成一個結果,好比計數,求和,平均數等函數。
那若是真的要輸出全部23歲的名字的話,那麼能夠這樣:
MySQL group_concat函數
完整的語法以下:
group_concat([DISTINCT] 要鏈接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])這個函數,能夠將分組後拼接內容,也算一個聚合函數,將多個結果拼接成一個結果,也能夠拼接的同時進行結果去重。
select group_concat(`name`,',') as stuName,age,count(age) as AgeCount from tb_student group by Age ;
將想要的統計內容,分組拼接:
有上面的結果,也能夠看出23歲的學生有兩名,分別爲麻子,孫悟空。這樣統計的結果更具備說服力。
ordery by
按哪一個字段進行排序,默認升序,desc降序。
接着在上個例子中按照統計的人數進行降序排列
use school; select group_concat(`name`,',') as stuName,age,count(age) as AgeCount from tb_student group by Age order by count(age) desc;
排序比較好理解,這裏就介紹到這裏。
這篇介紹了分組和排序的內容,在作統計的時候很是有用。