高级查询
常用的分组函数
COUNT
MIN
MAX
SUM
AVG
分组函数的语法
SELECT [column,] group_function(column)
FROM table
[WHERE condition]
[GROUP BY column]
[HAVING group_function(column)expression
[ORDER BY column | group_function(column)expression];
COUNT
COUNT( * | {[DISTINCT | ALL] column | expression})
COUNT( [DISTINCT | ALL] column | expression):返回满足条件的非空(NULL)行的数量
SELECT COUNT( COMM) from emp;
结果:4
使用DISTINCT 关键字
SELECT COUNT( DISTINCT DEPTNO) from emp;
结果:3
查询部门30有多少个员工领取奖金
SELECT COUNT(comm) from emp where deptno=30;
MIN和MAX
MIN和MAX函数主要是返回每组的最小值和最大值。
MIN([DISTINCT | ALL] column | expression)
MAX([DISTINCT | ALL] column | expression)
MIN和MAX可以用于任何数据类型
查询入职日期最早和最晚的日期
SELECT
MIN(hirdate),
MAX(HIREDATE)
FROM
emp
SUM函数和AVG函数'
SUM和AVG函数分别返回每组的总和及平均值。
SUM([DISTINCT | ALL] column | expression)
AVG([DISTINCT | ALL] column | expression)
SUM和AVG函数都是只能够对数值类型的列或表达式操作。
查询职位以SALES开头的所有员工平均工资、最低工资、最高工资、工资和。
SELECT
AVG(SAL) 平均工资,
MIN(SAL) 最低工资,
MAX(SAL) 最高工资,
SUM(SAL) 工资和
FROM
emp
WHERE
JOB LIKE 'SALES%'
IFNULL 函数可以使分组函数强制包含含有空值的记录
SELECT
COUNT(IFNULL(COMM,0))
FROM
emp;
所有员工的平均奖金
SELECT
AVG(IFNULL(COMM,0))
FROM
emp;
有奖金的平均奖金
SELECT
AVG(COMM)
FROM
emp;
练习:
查询部门20的员工,每个月的工资总和及平均工资。
SELECT
AVG(sal) 平均工资,
SUM(sal) 工资和
FROM
emp
WHERE
deptno = 20;
查询工作在CHICAGO的员工人数,最高工资及最低工资。
SELECT
COUNT(m.empno) 员工人数,
MAX(sal) 最高工资,
MIN(sal) 最低工资
FROM
emp m,
dept d
WHERE
m.deptno = d.DEPTNO
AND d.loc = 'CHICAGO';
查询员工表中一共有几种岗位类型
SE