[TOC] 分組操作 group by 指的是:將所有記錄按照某個相同欄位進行歸類 用法 :select 聚合函數(count),選取的欄位 from 表名 group by 分組的欄位; 註意點: group by : 是分組的關鍵字 group by 必須和聚合函數一起使用 例子: 常用的聚合函 ...
目錄
分組操作
group by 指的是:將所有記錄按照某個相同欄位進行歸類
用法 :select 聚合函數(count),選取的欄位 from 表名 group by 分組的欄位;
註意點:
group by:是分組的關鍵字
group by 必須和聚合函數一起使用
例子:
--以性別為例, 進行分組, 統計一下男生和女生的人數是多少個
select count(id), gender from students group by gender;
+-----------+--------+
| count(id) | gender |
+-----------+--------+
| 2 | 男 |
| 3 | 女 |
| 1 | 中性 |
+-----------+--------+
--對班級進行分組,統計出每個班級年齡最大的那個人
select cls_id,max(age),group_concat(name) from students group by cls_id;
+--------+----------+----------------------+
| cls_id | max(age) | group_concat(name) |
+--------+----------+----------------------+
| 1 | 30 | 張飛,關羽,小鬼 |
| 2 | 18 | 小喬,孫尚香 |
| 3 | 20 | 甄姬 |
+--------+----------+----------------------+
常用的聚合函數
#求最大年齡
mysql> select MAX(age) from student_detail;
#求最小年齡
mysql> select MIN(age) from student_detail;
#求和
mysql> select SUM(age) from student_detail;
#求平均數
mysql> select AVG(age) from student_detail;
#四捨五入
mysql> select ROUND(AVG(age)) from student_details;
#統計
mysql> select count(s_id) from student;
having 二次刪選
表示對group by之後的數據,進行再一次的二次篩選
-- 查詢平均年齡超過20歲的性別,以及姓名
select gender,group_concat(name) from students group by gender having avg(age)>20;
+--------+--------------------+
| gender | group_concat(name) |
+--------+--------------------+
| 男 | 張飛,關羽 |
+--------+--------------------+
排序
order by 欄位名 asc(升序) desc(降序)
升序asc可省略
-- 查詢年齡在18到30歲之間的男性,按照年齡從小到大排序
select * from students where age between 18 and 30 and gender='男' order by age asc;
+----+--------+------+--------+--------+--------+
| id | name | age | height | gender | cls_id |
+----+--------+------+--------+--------+--------+
| 5 | 關羽 | 28 | 190.00 | 男 | 1 |
| 4 | 張飛 | 30 | 190.00 | 男 | 1 |
+----+--------+------+--------+--------+--------+
可以多個排序:order by age desc, id asc
表示:先對age降序,如果年齡相同,就按id升序
select * from students order by age desc,id asc;
+----+-----------+------+--------+--------+--------+
| id | name | age | height | gender | cls_id |
+----+-----------+------+--------+--------+--------+
| 4 | 張飛 | 30 | 190.00 | 男 | 1 |
| 5 | 關羽 | 28 | 190.00 | 男 | 1 |
| 3 | 甄姬 | 20 | 170.00 | 女 | 3 |
| 1 | 小喬 | 18 | 180.00 | 女 | 2 |
| 2 | 孫尚香 | 18 | 180.00 | 女 | 2 |
| 6 | 小鬼 | 16 | 178.00 | 中性 | 1 |
+----+-----------+------+--------+--------+--------+
分頁查詢
用法:limit offset, size
offset: 行數據索引
size: 取多少條數據
select * from students limit 3,5;
+----+--------+------+--------+--------+--------+
| id | name | age | height | gender | cls_id |
+----+--------+------+--------+--------+--------+
| 4 | 張飛 | 30 | 190.00 | 男 | 1 |
| 5 | 關羽 | 28 | 190.00 | 男 | 1 |
| 6 | 小鬼 | 16 | 178.00 | 中性 | 1 |
+----+--------+------+--------+--------+--------+
--limit 可以把offset省略,預設從第一行取
select * from students limit 5;
+----+-----------+------+--------+--------+--------+
| id | name | age | height | gender | cls_id |
+----+-----------+------+--------+--------+--------+
| 1 | 小喬 | 18 | 180.00 | 女 | 2 |
| 2 | 孫尚香 | 18 | 180.00 | 女 | 2 |
| 3 | 甄姬 | 20 | 170.00 | 女 | 3 |
| 4 | 張飛 | 30 | 190.00 | 男 | 1 |
| 5 | 關羽 | 28 | 190.00 | 男 | 1 |
+----+-----------+------+--------+--------+--------+
總結:
查詢的使用順序:
select * from 表名 where 條件 group by 條件 having 條件 order by 條件 limit 條件
必須嚴格按照這樣的順序寫!!!!!