mysql sql 查询库_mysql数据库查询

'''分组:根据字段相同值形成不同的类别,不明确分组其实整个表就为一个默认大组

原因:把以值共性得到的类别作为考虑单位,不再关系单条记录,而且一组记录

结果:只能考虑组内多条数据的聚会结果(聚合函数结果),分组的字段同样是聚合结果,如:组内的最大最小值

sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

聚合函数:

max():最大值

min():最小值

avg():平均值

sum():和

count():记数

group_concat():组内字段拼接,用来查看组内其他字段

eg:1

每个部门的平均薪资

select dep, avg(salary) '平均薪资' from emp group by dep;

+-----------+-------------------+

| dep | 平均薪资 |

+-----------+-------------------+

| 咨询部 | 6.250000059604645 |

| 教学部 | 5.512500047683716 |

| 教职部 | 5.850000023841858 |

+-----------+-------------------+

eg:2

每个部门都有哪些人

select dep, group_concat(name) from emp group by dep; #group_concat是固定的语句,不可修改

+-----------+--------------------------------------------+

| dep | group_concat(name) |

+-----------+--------------------------------------------+

| 咨询部 | san1,san,ying,zero |

| 教学部 | san2,kevin,alex,owen,jiboy,tank,jerry,engo |

| 教职部 | monkey,yangsir |

+-----------+--------------------------------------------+

需求:

各性别中附属于教学部的最高薪资

select max(salary) '最高薪资', gender from emp where dep='教学部' group by gender;

+--------+--------------+

| gender | 最高薪资 |

+--------+--------------+

| 男 | 9.4 |

| 女 | 3 |

+--------+--------------+

思考:

想知道需求中员工的姓名 => 子查询

上方结果: 男的最高薪资对应的人名, 女的最高薪资对应的人名

# select group_concat(name), max(salary) '最高薪资', gender from emp where dep='教学部' group by gender; 错误

select name from emp where salary in (select max(salary) '最高薪资' from emp where dep='教学部' group by gender);

+----+-------+--------+------+--------+--------+-----------+-----------+

| id | name | gender | age | salary | area | port | dep |

+----+-------+--------+------+--------+--------+-----------+-----------+

| 2 | engo | 男 | 38 | 9.4 | 山东 | 济南 | 教学部 |

| 3 | jerry | 女 | 30 | 3 | 江苏 | 张家港 | 教学部 |

+----+-------+--------+------+--------+--------+-----------+-----------+'''注:当我在表中插入:insert into emp(id,name,gender,age,salary,area,port,dep) values(15, 'per,'女',18, 3.0,'江苏','张家港','咨询部');时,此时在执行上诉mysql语句,得到的结果会变为:

+----+-------+--------+------+--------+--------+-----------+-----------+

| id | name | gender | age | salary | area | port | dep |

+----+-------+--------+------+--------+--------+-----------+-----------+

| 2 | engo | 男 | 38 | 9.4 | 山东 | 济南 | 教学部 |

| 3 | jerry | 女 | 30 | 3 | 江苏 | 张家港 | 教学部 |

| 15 | per | 女 | 18 | 3 | 江苏 | 张家港 | 咨询部 |

+----+-------+--------+------+--------+--------+-----------+-----------+很明显与我们的意愿相悖,但是也具有一定的参考度。

​1. 14条数据部门有3个, 并且每个部分有多条记录, 可以作为分组依据, 同理, 性别也可以#select * from emp group by dep; # 非分组安全模式下, 可以查询非聚合结果, 显示的是第一条记录, 没有意义, 分组安全模式下不能查询非聚合结果的字段

result:'''ERROR 1055 (42000): 'kt1.emp.id' isn't in GROUP BY''' #select后面的查询内容必须要是分组字段或者聚合函数得到的结果,否则就会报错。

select depfromemp group by dep;+-----------+

| dep |

+-----------+

| 咨询部 |

| 教学部 |

| 教职部 |

+-----------+​2. 如果就像以姓名进行分组, 可以, 但没多大意义, 原因name值基本上都不相同, 以组考虑会导致组内大多只要一条记录(自成一组), 组的利用就不是很强烈, 此类分组是无意义的

select namefrom emp group by name; #可以分组, 意义不大

考虑的三个问题: 以什么分组(相同数据较多的字段) 分组后的考虑单位(组并非组内的每一条记录) 可以查询的结果(当前分组的字段及聚合函数形成的聚合结果)

你可能感兴趣的:(mysql,sql,查询库)