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

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章