《MySql自字段、聚合和分组知识点》由会员分享,可在线阅读,更多相关《MySql自字段、聚合和分组知识点(3页珍藏版)》请在金锄头文库上搜索。
1、MySQL 字段控制、聚合和分组1 字段控制查询1.1去除重复记录去除重复记录(两行或两行以上记录中系列的上的数据都相同) ,例如 emp 表中 sal 字段就存在相同的记录。当只查询 emp 表的 sal 字段时,那么会出现重复记录,那么想去除重复记录,需要使用DISTINCT:SELECT DISTINCT sal FROM emp;1.2查看雇员的月薪与佣金之和因为 sal 和 comm 两列的类型都是数值类型,所以可以做加运算。如果 sal 或 comm 中有一个字段不是数值类型,那么会出错。SELECT *,sal+comm FROM emp;comm 列有很多记录的值为 NULL,
2、因为任何东西与 NULL 相加结果还是 NULL,所以结算结果可能会出现 NULL。下面使用了把 NULL 转换成数值 0 的函数 IFNULL:SELECT *,sal+IFNULL(comm,0) FROM emp;1.3给列名添加别名在上面查询中出现列名为 sal+IFNULL(comm,0),这很不美观,现在我们给这一列给出一个别名,为total:SELECT *, sal+IFNULL(comm,0) AS total FROM emp;给列起别名时,是可以省略 AS 关键字的:SELECT *,sal+IFNULL(comm,0) total FROM emp;2 聚合函数聚合函数
3、是用来做纵向运算的函数: COUNT():统计指定列不为 NULL 的记录行数; MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算; MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算; SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为 0; AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为 0;2.1COUNT当需要纵向统计时可以使用 COUNT()。 查询 emp 表中记录数:SELECT COUNT(*) AS cnt FROM emp; 查询 emp 表中有佣金的人数:SELE
4、CT COUNT(comm) cnt FROM emp;注意,因为 count()函数中给出的是 comm 列,那么只统计 comm 列非 NULL 的行数。 查询 emp 表中月薪大于 2500 的人数:SELECT COUNT(*) FROM empWHERE sal 2500; 统计月薪与佣金之和大于 2500 元的人数:SELECT COUNT(*) AS cnt FROM emp WHERE sal+IFNULL(comm,0) 2500; 查询有佣金的人数,以及有领导的人数:SELECT COUNT(comm), COUNT(mgr) FROM emp;2.2SUM 和 AVG当需
5、要纵向求和时使用 sum()函数。 查询所有雇员月薪和:SELECT SUM(sal) FROM emp; 查询所有雇员月薪和,以及所有雇员佣金和:SELECT SUM(sal), SUM(comm) FROM emp; 查询所有雇员月薪+ 佣金和:SELECT SUM(sal+IFNULL(comm,0) FROM emp; 统计所有员工平均工资:SELECT SUM(sal), COUNT(sal) FROM emp;或者SELECT AVG(sal) FROM emp;2.3MAX 和 MIN 查询最高工资和最低工资:SELECT MAX(sal), MIN(sal) FROM emp;
6、3 分组查询当需要分组查询时需要使用 GROUP BY 子句,例如查询每个部门的工资和,这说明要使用部分来分组。3.1分组查询 查询每个部门的部门编号和每个部门的工资和:SELECT deptno, SUM(sal)FROM empGROUP BY deptno; 查询每个部门的部门编号以及每个部门的人数:SELECT deptno,COUNT(*)FROM empGROUP BY deptno; 查询每个部门的部门编号以及每个部门工资大于 1500 的人数:SELECT deptno,COUNT(*)FROM empWHERE sal1500GROUP BY deptno;3.2HAVING 子句 查询工资总和大于 9000 的部门编号以及工资和:SELECT deptno, SUM(sal)FROM empGROUP BY deptnoHAVING SUM(sal) 9000;注意,WHERE 是对分组前记录的条件,如果某行记录没有满足 WHERE 子句的条件,那么这行记录不会参加分组;而 HAVING 是对分组后数据的约束。