// 分组查询和聚合函数
// 分组查询 : 将指定字段中的数据,按照不同的具体数值,进行分组
// 数据相同的分在一个分组中
// 一个分组中存储多条数据,实际只显示条数据
SELECT * FROM `user3` GROUP BY `dep`;
mysql> SELECT * FROM `user3` GROUP BY `dep`;
+----+--------+------+------+------+-------+----------+
| id | name | age | sex | city | dep | pay |
+----+--------+------+------+------+-------+----------+
| 5 | Eric | 23 | 保密 | 北京 | JAVA | 9000.00 |
| 1 | 王卓 | 21 | 保密 | 上海 | PHP | 15000.00 |
| 4 | 梁晓洁 | 17 | 女 | 北京 | UI/UE | 8000.00 |
| 2 | Andy | 27 | 男 | 广州 | WEB | 9000.00 |
+----+--------+------+------+------+-------+----------+
当前是 按照 dep 字段的数据进行分组
dep当中 数据相同的 会分在同一组别中存储
显示默认只显示一条数据
| 5 | Eric | 23 | 保密 | 北京 | JAVA | 9000.00 |
虽然只显示的是当天这一条数据,实际 在 dpe 是 java 的分组中 存储的是 所有 dep 是 java 的数据
聚合函数是专门针对 分组中的数据 进行的 数据操作
COUNT() 计算分组中的数据数据数量
MIN() 计算分组中数据的最小值
MAX() 计算分组中数据的最大值
AVG() 计算分组中数据的平均值
SUM() 计算分组中数据的总和
查询每个部门的 平均薪资
每个部门 按照 部门 `dep` 字段 分组查询 GROUP BY `dep`
平均薪资 求 平均值 使用 AVG() 聚合函数
薪资 AVG() 中的字段 是 存储薪资的字段 `pay`
联合查询,需要设定在 SELECT 和 FROM 之前,作为查询内容执行,结果会显示在结果的表结构中
SELECT 和 FROM 中还需要设定哪个字段,需要看项目需求
SELECT `dep` , AVG(`pay`) FROM `user3` GROUP BY `dep`;
求每个部门的平均年龄
每个部门 按照 部门字段 `dep` 分组
平均 聚合函数 AVG()
年龄 聚合函数()中写 年龄字段 `age`
SELECT `dep` , AVG(`age`) FROM `user3` GROUP BY `dep`;
求 每个城市 年龄 在 20-25岁之间 员工人数
每个城市 按照城市字段分组 GROUP BY `city`
员工人数 员工人数实际就是数据数量
使用 聚合函数 COUNT()
COUNT() 查询数据数量,一般写 `id` 字段
数据简单,不会重复
年龄在 20 -25 岁之间 `age` >= 20 AND `age` <= 25
这是对于字段的约束条件,使用 WHERE 来设定
先写 WHERE 再写 GROUP BY
SELECT `city` , COUNT(`id`) as `人数` FROM `user3` WHERE `age` >= 20 AND `age` <= 25 GROUP BY `city`;
显示 20-25岁员工人员数在 10人以上的城市信息
新增约束条件 员工人数 > 10
员工人数 不是某个指定的字段 是 聚合函数的执行结果
聚合函数的执行结果,不能使用WHERE来约束,WHERE是约束字段数据的
聚合函数的约束条件使用 HAVING 来执行
HAVING 写在 GROUP BY 之后
SELECT `city` , COUNT(`id`) as `人数` FROM `user3`
WHERE `age` >= 20 AND `age` <= 25
GROUP BY `city`
HAVING COUNT(`id`) > 10 ;
查询部门最高薪资
SELECT `dep` , MAX(`pay`) FROM `user3`
GROUP BY `dep`;
查询部门20-25岁人员的最高薪资
SELECT `dep` , MAX(`pay`) FROM `user3`
WHERE `age` >= 20 AND `age` <= 25
GROUP BY `dep`;
显示部门20-25岁人员的最高薪资 大于 20K的 部门
SELECT `dep` , MAX(`pay`) FROM `user3`
WHERE `age` >= 20 AND `age` <= 25
GROUP BY `dep`
HAVING MAX(`pay`) > 20000;
复杂查询也是由简单查询语句组合而成
*/
/*
设定查询结果的排序方式
查询结果,默认按照 id 主键值的 升序 排列
查询结果,可以按照指定字段的 升序 或者 降序 排列
SELECT * FROM `表名` ORDER BY `字段` 排序方式
排序方式 : ASC 升序 默认值可以不写
DESC 降序 要设定就必须写
按照年龄,从小到大显示员工信息
SELECT * FROM `user3` ORDER BY `age` ;
按照薪资排序 从大到小
SELECT * FROM `user3` ORDER BY `pay` DESC;
可以同时设定多个字段的排序方式
先按照第一个字段的排序方式进行排序
数据相同时,再按照第二个字段排序方式进行排序
先按照 age 字段的 升序排列
age 数值相同时 再 按照 `id` 字段的升序排列
SELECT * FROM `user3` ORDER BY `age` , `id` ;