mysql分组查询及其测试用例

博客介绍了数据库SQL分组查询的语法,包括select、from、where、group by、order by等子句的使用。阐述了分组查询的特点,如与分组函数一同查询的字段要求、分组前后筛选的区别等。还通过多个案例展示了简单分组、分组前后筛选、添加排序及按多字段分组的应用。

语法:

select 查询列表

from

where 筛选条件】

group by 分组的字段

order by 排序的字段】;

 特点:

1、和分组函数一同查询的字段必须是group by后出现的字段

2、筛选分为两类:分组前筛选和分组后筛选,分组前使用where,分组后使用having

3、分组可以按单个字段也可以按多个字段

4、可以搭配order by排序使用

 

数据库结构图:

 

 

1.简单的分组 

案例1:查询每个工种的员工平均工资

SELECT AVG(salary),job_id FROM employees GROUP BY job_id;

 

案例2:查询每个位置的部门个数

SELECT COUNT(*),location_id FROM departments GROUP BY location_id;

 

2、可以实现分组前的筛选

 案例1:查询邮箱中包含a字符的 每个部门的最高工资

SELECT MAX(salary),department_id FROM employees WHERE email LIKE '%a%' GROUP BY department_id; 

 

案例2:查询有奖金的每个领导手下员工的平均工资

SELECT AVG(salary),manager_id FROM employees WHERE commission_pct IS NOT NULL GROUP BY manager_id;

 

3、分组后筛选

 案例:查询哪个部门的员工个数>5

查询每个部门的员工个数

SELECT COUNT(*),department_id FROM employees GROUP BY department_id; 

筛选刚才结果 

SELECT COUNT(*),department_id FROM employees GROUP BY department_id HAVING COUNT(*)>5;

 

案例2:每个工种有奖金的员工的最高工资>12000的工种编号和最高工资 

SELECT job_id,MAX(salary) FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING MAX(salary)>12000;

 

4.添加排序 

案例:每个工种有奖金的员工的最高工资>6000的工种编号和最高工资,按最高工资升序

 SELECT job_id,MAX(salary) m FROM employees WHERE commission_pct IS NOT NULL GROUP BY job_id HAVING m>6000 ORDER BY m ; 

 

5.按多个字段分组 

案例:查询每个工种每个部门的最低工资,并按最低工资降序 

SELECT MIN(salary),job_id,department_id FROM employees GROUP BY department_id,job_id ORDER BY MIN(salary) DESC;

转载于:https://www.cnblogs.com/gtx690/p/11095039.html

http://3y.uu456.com/bp_41n3i6v5019f98j84o17_1.html http://max.book118.com/html/2013/0725/4481681.shtm -试题库 select * from QUESTION t where course='java' order by qtype ; --考试成绩 select * from recordtest where userid='2011110531' and course='java'; --考试科目题型设计 select * from test_set where course='java'; --学生答题记录 select * from test where userid='2011110531' and course='java'; --用户表 select * from userinfo where userid='2011110531' ; --学生考试记录状态表 select * from userflag where userid='2011110531'; 修改: 编码统一UTF-8(Eclipse workspace 、项目编码) ①学生管理模块 登录账号设为身份证号码/手机号码 注册时添加不能重复验证 ④管理员后台试题支持excel导入试题 ②学生考试模块 考试添加考试时间(为了支持java多次考试) 设计改动表:recordtest、test_set、test、userflag ③教师管理 老师阅卷(每个学生多条数据 根据学号和考试时间分组 ) 加入分页 后期: ⑤试题库加入[填空题] ⑥加入日语考试 -- Add/modify --用户编号默认手机号码 alter table USERINFO modify userid VARCHAR2(11); -- Add/modify columns alter table USERFLAG modify userid VARCHAR2(11); -- Add/modify columns alter table TEST modify userid VARCHAR2(11); -- Add/modify columns alter table RECORDTEST modify userid VARCHAR2(11); -- Add/modify columns --加入考试时间 alter table USERFLAG add test_time VARCHAR2(15); update USERFLAG set test_time =to_char(sysdate,'yyyy/mm/dd'); commit; -- Add/modify columns --加入考试时间 alter table TEST_SET add test_time varchar2(15); update TEST_SET set test_time =to_char(sysdate,'yyyy/mm/dd'); commit; -- Add/modify columns --加入考试时间 alter table TEST add test_time varchar2(15); update TEST set test_time =to_char(sysdate,'yyyy/mm/dd'); commit; -- Add/modify columns --加入考试时间 alter table RECORDTEST add test_time varchar2(15); update RECORDTEST set test_time =to_char(sysdate,'yyyy/mm/dd'); commit; --修改密码长度(md5加密) -- Add/modify columns alter table USERINFO modify password VARCHAR2(40); update USERINFO set password = 'e10adc3949ba59abbe56e057f20f883e'; commit; --将题库选项字段设置300 -- Add/modify columns alter table QUESTION modify keya VARCHAR2(300); alter table QUESTION modify keyb VARCHAR2(300); alter table QUESTION modify keyc VARCHAR2(300)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值