一、聚合
聚合能夠快速得到統計數據,以下提供了5個聚合函數:
-
count(*):表示計算總行數,等同於 count(列)
-
max(列):表示求此列的最大值
-
min(列):表示求此列的最小值
-
sum(列):表示求此列的和
-
avg(列):表示求此列的平均值
例:
- 查詢學生總數
select count(*) from students;
- 查詢女生最大年齡
select max(age) from students where gender=0;
- 查詢未刪除的學生最小編號
select min(id) from students where isdelete=0;
- 查詢男生的編號之和
select sum(id) from students where gender=1;
- 查詢男生的平均年齡
select sum(age) from students where gender=1;
二、分組
按照字段分組,表示此字段相同的數據會被放到一個組中,實質是合並行,分組的目的一般是為了進行數據統計,做聚合運算
-
語法:
select 列1,...聚合... from 表名 group by 列1,...
例:
-
查詢男女生總數
select gender as 性別, count(*) as 總數 from students group by gender;
分組后的數據篩選:
-
語法
select 列1,...聚合... from 表名 group by 列1,...having 條件;
- having后面的條件運算符與where的相同,但是選擇集不同,where是對from后面指定的表進行數據篩選,屬於對原始數據的篩選,having是對group by的結果進行篩選
例:
- 查詢男生總人數
select gender as 性別, count(*) as 總數 from students group by gender having gender=1;
三、排序
為了方便查看數據,可以對數據進行排序
-
語法
select * from 表名 order by 列1 asc|desc,列2 asc|desc,...
- 將行數據按照列1進行排序,如果某些行列1的值相同時,則按照列2排序,以此類推
-
asc:從小到大排列,即升序,默認就是按照這種方式排列
- desc:從大到小排序,即降序
例:
- 按學號降序查詢男生信息
select * from students where gender=1 order by id desc;
四、獲取部分行數據
當數據量過大時,在一頁中查看數據是一件非常麻煩的事情
-
語法:
select * from 表名 limit start,count;
從start開始,獲取count條數據,start索引從0開始,如果不寫start,則默認start=0,表示從第1個數據開始,獲取count條
-
分頁功能的實現:
- 比如每頁有m條數據,顯示第n頁的數據
select * from 表名 where... limit (n-1)*m, m;
如果第n頁數據不足m條,則顯示當前頁的實際條數
- 比如每頁有m條數據,顯示第n頁的數據
五、總結:
- 完整的select語句:
select distinct * from 表名 where .... group by ... having ... order by ... limit star,count;
- 實際使用中,只是語句中某些部分的組合,而不是全部