目錄
- 分組操作
- 常用的聚合函式
- having 二次刪選
- 排序
- 分頁查詢
分組操作
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 條件
必須嚴格按照這樣的順序寫!!!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/114649.html
標籤:MySQL
上一篇:mysql索引命中規則
下一篇:什么是事務
