mysql之group by,order by

寫在前面

上篇文章介紹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;

排序比較好理解,這裏就介紹到這裏。

總結

這篇介紹了分組和排序的內容,在作統計的時候很是有用。

相關文章
相關標籤/搜索