mysql 面试实战--sql语句查询

最近去面试,做了一道经典的mysql试题,分享一下。
将测试数据表导入数据库,其中name字段代表“姓名”,score字段代表“分数”。

1创建表结构和添加基础测试数据

create table `tb_score` (
    `id` double ,
    `name` varchar (300),
    `score` double 
);

insert into `tb_score` (`id`, `name`, `score`) values('1','n1','59');
insert into `tb_score` (`id`, `name`, `score`) values('2','n2','66');
insert into `tb_score` (`id`, `name`, `score`) values('3','n3','78');
insert into `tb_score` (`id`, `name`, `score`) values('4','n1','48');
insert into `tb_score` (`id`, `name`, `score`) values('5','n3','85');
insert into `tb_score` (`id`, `name`, `score`) values('6','n5','51');
insert into `tb_score` (`id`, `name`, `score`) values('7','n4','98');
insert into `tb_score` (`id`, `name`, `score`) values('8','n5','53');
insert into `tb_score` (`id`, `name`, `score`) values('9','n2','67');
insert into `tb_score` (`id`, `name`, `score`) values('10','n4','88');

1.1 单分数最高的人和单分数最低的人

SELECT NAME,MAX(score),MIN(score) FROM tb_score;

在这里插入图片描述

1.2 两门分数加起来的第2至5名

SELECT NAME,SUM(score) FROM tb_score GROUP BY NAME ORDER BY SUM(score) DESC LIMIT 1,4

在这里插入图片描述

1.3 两门总分数在150分以下的人。

SELECT NAME,SUM(score) FROM tb_score GROUP BY NAME HAVING SUM(score)<150

在这里插入图片描述

1.4 两门平均分数介于60和80的人。

SELECT NAME,AVG(score) FROM tb_score GROUP BY NAME HAVING AVG(score) BETWEEN 60 AND 80;

SELECT NAME,AVG(score) FROM tb_score GROUP BY NAME HAVING AVG(score)>60 AND AVG(score)<80;

在这里插入图片描述

1.5 总分大于150分,平均分小于90分的人数。

SELECT NAME,SUM(score),AVG(score) FROM tb_score GROUP BY NAME HAVING SUM(score)>150 AND AVG(score)<90

在这里插入图片描述

1.6 总分大于150分,平均分小于90分的人数有几个。

SELECT COUNT(DISTINCT NAME) FROM tb_score GROUP BY NAME HAVING SUM(score)>150 AND AVG(score)<90

在这里插入图片描述

2.创建表结构

create table `t_employ` (
	`id` int (11),
	`work_no` int (255),
	`name` varchar (165),
	`department` varchar (165),
	`type` varchar (60),
	`gz` double 
); 
INSERT INTO `t_employ` VALUES ('1', '1', '张三', '教学部', '老师', '1100');
INSERT INTO `t_employ` VALUES ('2', '2', '张二', '手工部', '钳工', '1000');
INSERT INTO `t_employ` VALUES ('3', '3', '张三', '教学部', '钳工', '1700');
INSERT INTO `t_employ` VALUES ('4', '4', '张四', '手工部', '钳工', '6000');
INSERT INTO `t_employ` VALUES ('5', '5', '张五', '体育部', '游泳', '1400');
INSERT INTO `t_employ` VALUES ('6', '6', '张六', '手工部', '木工', '1200');
INSERT INTO `t_employ` VALUES ('7', '7', '张七', '教学部', '老师', '1300');
INSERT INTO `t_employ` VALUES ('8', '8', '张八', '手工部', '木工', '2500');
INSERT INTO `t_employ` VALUES ('9', '9', '张九', '体育部', '棒球', '3000');
INSERT INTO `t_employ` VALUES ('10', '10', '十弟', '手工部', '钳工', '2500');

2.1 四种查询练习

-- 1请用一个SQL语句查询每个部门的总人数

SELECT department,COUNT(id) FROM t_employ GROUP BY department

-- 2请用一个SQL语句查询出不同部门的担任“钳工”的职工平均工资

SELECT department,AVG(gz) FROM t_employ WHERE TYPE='钳工' GROUP BY department

-- 3请用一个SQL语句查询出不同部门的担任“钳工”的职工平均工资高于2000的部门

SELECT department,AVG(gz) FROM t_employ WHERE TYPE='钳工' GROUP BY department HAVING AVG(gz)>2000

-- 4请用一个SQL语句查询每个部门低于平均工资的员工信息【内连接 on and 和 内连接 on where的使用】

SELECT e.department, e.gz ,e.name FROM t_employ e INNER JOIN 
(SELECT department ,AVG(gz) AS avgGz FROM t_employ GROUP BY department) t 
ON e.department =t.department WHERE e.gz < t.avgGz

第一个sql
sql一
第二个sql
在这里插入图片描述
第三个sql
在这里插入图片描述
第四个sql

SELECT department ,AVG(gz) AS avgGz FROM t_employ GROUP BY department

在这里插入图片描述

SELECT e.department, e.gz ,e.name FROM t_employ e INNER JOIN 
(SELECT department ,AVG(gz) AS avgGz FROM t_employ GROUP BY department) t 
ON e.department =t.department WHERE e.gz < t.avgGz

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值