目录:
组函数
分组
子查询
创建和删除表
DML 语句
事务控制语句
日期类型和格式
如何存入日期
1 组函数
1.1 问题
常见的组函数
count 统计一组数据的个数
max 统计一组数据的最大值
min 统计一组数据的最小
sum 统计一组数据的和
avg 统计一组数据的平均值
组函数中可以使用distinct
1.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:统计工资的个数 工资的和 工资的平均值
代码如下所示:
select count(salary),sum(salary),avg(salary)
from s_emp;
select count(distinct salary),sum(distinct salary)
,avg(distinct salary) from s_emp;
以上代码中,以下代码:
count(salary),sum(salary),avg(salary)
统计个数count函数,求和函数sum,求平均值函数avg,分别写上针对哪个字段做操作即可求得结果。
以上代码中,以下代码:
count(distinct salary),sum(distinct salary)
,avg(distinct salary)
在salary字段可能存在重复的值,所以想过滤掉重复的值再用组函数计算结果的时候在字段名前加上distinct关键字即可。
2 分组
2.1 问题
按照一定的标准 把数据分成若干部分
group by 分组标准
having 对组数据进行过滤
在分组语句中 select后的字段 要么是分组标准
要么是经过合适的组函数处理过的
2.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:按照部门号分组 统计每个部门的人数
代码如下所示:
select dept_id,count(id)
from s_emp
where 1=1
group by dept_id;
以上代码中,以下代码:
count(id)
部门中每个人有唯一的id号,所以想计算部门中的人数只需要把部门中的id号用组函数count即可求得结果。
以上代码中,以下代码:
group by dept_id;
按照部门号分组,这样分好组后相同部门的员工的数据是存放在一起的,这样在select语句中count函数计算的就是相邻的同一个组的id的个数。
步骤二:按照部门号 分组 统计每个部门的平均工资
要显示平均工资大于1400的部门
代码如下所示:
select dept_id,avg(salary) asal
from s_emp
where 1=1
group by dept_id
having avg(salary)>1400
order by asal;
以上代码中,以下代码:
group by dept_id
因为涉及到分组和计算每个分组部门内的数据,所以需要先按照部门名称分组。
以上代码中,以下代码:
having avg(salary)>1400
要求平均工资大于1400,所以先使用avg函数求得平均工资,然后对求得的平均数进行having数据过滤,从而得到平均工资大于1400的部门。
以上代码中,以下代码:
order by asal;
把最终删选出来的数据按照字典顺序排序显示。
步骤三:按照部门号分组 统计每个部门的人数
要显示人数大于等于2的部门 还要显示部门名
代码如下所示:
select dept_id,count(e.id),max(name)
from s_emp e,s_dept d
where e.dept_id=d.id
group by dept_id
having count(e.id)>=2;
以上代码中,以下代码:
from s_emp e,s_dept d
where e.dept_id=d.id
因为查询的数据涉及到两张表,员工信息表s_emp和部门表s_dept,因此from的数