mysql-group by 专题(包含时间戳的应用)
本文参考http://blog.csdn.net/xxpyeippx/article/details/8059910
1、创建一个关于员工工资的表:
create table if not exists staff;
create table staff(
id int not null primary key auto_increment, #自动增长的字段不加primary key 的时候创建不了表
pname char(10) not null,
dempt varchar(10) not null,
salary int not null,
edlevel int(1) not null,
hiredate timestamp not null); #此处是关于时间格式字段的创建
2、插入表数据(自动增长字段不用插入数据)
insert into staff (pname,dempt,salary,edlevel,hiredate) values('张三','开发部',2000,3,'2009-10-11');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('李四','开发部',2500,3,'2009-10-01');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('王五','设计部',2600,5,'2010-10-02');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('王六','设计部',2300,4,'2010-10-03');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('马七','设计部',2100,4,'2010-10-06');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('赵八','销售部',3000,5,'2010-10-05');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('钱九','销售部',3100,7,'2010-10-07');
insert into staff (pname,dempt,salary,edlevel,hiredate) values('孙十','销售部',3500,7,'2010-10-06');
3、查询
select id,pname,dempt,salary,edlevel,date(hiredate) as hiredate from staff; #此处用time()函数可以得到年月日,具体参照日期格式应用
4、关于group by
a:按部门分类查询,列出每个部门最高薪水的结果:
select dempt,max(salary) as salary from staff group by dempt;
b:按部门汇总总薪水:
select dempt,sum(salary) as tatol_salary from staff group by dempt;
c:将 WHERE 子句与 GROUP BY 子句一起使用,查询公司2010年入职的各个部门每个级别里的最高薪水
select dempt,edlevel,max(salary) as max_salary from staff where year(hiredate)='2010' gro #语句解析:2010年入职是条件(where),各个部门每个级别 分类汇总(group by),最高薪水是目的(salary),排序(order by)
d:聚合的使用
寻找雇员数超过2个的部门的最高和最低薪水:
select dempt,max(salary) as max,min(salary) as min from staff group by dempt having count(pname)>2 order by dempt;
寻找雇员平均工资大于3000的部门的最高和最低薪水:
select dempt,max(salary) as max,min(salary) as min from staff group by dempt having avg(salary)>3000 order by dempt;
本文持续更新。。

浙公网安备 33010602011771号