MySQL基础练习题:习题456

这部分主要是为了帮助大家回忆回忆MySQL的基本语法,数据库来自于MySQL的官方简化版,题目也是网上非常流行的35题。这些基础习题基本可以涵盖面试中需要现场写SQL的问题。上期帮助大家完成了热身运动,接下来让我们继续练习。

给出最高薪水(给出三种解决方案)

Solution1 :

复制代码
mysql> select ename,max(sal) from emp;
+--------+----------+
| ename  | max(sal) |
+--------+----------+
| SIMITH |  5000.00 |
+--------+----------+

Solution2:

按照薪水降序排列,取第一个

复制代码
mysql> select ename,sal from emp order by sal desc limit 1;
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
+-------+---------+

Solution3:

最大值不小于表中任何一个工资,所以不会出现在此临时表中

复制代码
mysql> select ename,sal from emp where sal not in 
(select a.sal from emp a join emp b on a.sal<b.sal);
+-------+---------+
| ename | sal     |
+-------+---------+
| KING  | 5000.00 |
+-------+---------+

取得平均薪水最高的部门和部门编号

解法一

1,先取得每个部门的平均薪水

复制代码
mysql> select deptno, avg(sal) as avgsal from emp group by deptno;
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     20 | 2175.000000 |
|     30 | 1566.666667 |
|     10 | 2916.666667 |
+--------+-------------+

2,再取得最高的平均薪水

复制代码
mysql> select avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1; 
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     20 | 2175.000000 |
|     30 | 1566.666667 |
|     10 | 2916.666667 |
+--------+-------------+

3,然后取得和最高平均薪水相同的部门(因为可能有多个部门并列最高)

复制代码
mysql> select deptno,avg(sal) as avgsal from emp group by deptno having avgsal=
    -> (select avg(sal) as avgsal from emp group by deptno order by avgsal desc limit 1);
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     10 | 2916.666667 |
+--------+-------------+

解法二 : 使用max()函数

复制代码
mysql> select deptno,avg(sal) as avgsal 
from emp group by deptno having avgsal=(select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);
+--------+-------------+
| deptno | avgsal      |
+--------+-------------+
|     10 | 2916.666667 |
+--------+-------------+

取得平均薪水最高的部门名称

解法一

第一步获取每个部门的平均薪资,

复制代码
(root@localhost) [employees]>select a.deptno, avg(a.sal) from emp a group by a.deptno;
+--------+-------------+
| deptno | avg(a.sal)  |
+--------+-------------+
|     20 | 2175.000000 |
|     30 | 1566.666667 |
|     10 | 2916.666667 |
+--------+-------------+
3 rows in set (0.16 sec)

(root@localhost) [employees]>

再双表联查(emp和dept),获得每个部门的平均薪资,部门编号和部门名称

复制代码
(root@localhost) [employees]>select b.dname,a.deptno, avg(a.sal) from emp a join dept b on a.deptno = b.deptno group by a.deptno;
+-------------+--------+-------------+
| dname       | deptno | avg(a.sal)  |
+-------------+--------+-------------+
| RESEARCHING |     20 | 2175.000000 |
| SALES       |     30 | 1566.666667 |
| ACCOUNTING  |     10 | 2916.666667 |
+-------------+--------+-------------+
3 rows in set (0.03 sec)

(root@localhost) [employees]>

最后降序排列,只取第一个

复制代码
mysql> select b.dname,avg(a.sal) as avgsal from emp a join dept b on a.deptno=b.deptno group by b.dname having avgsal=(select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);
+------------+-------------+
| dname      | avgsal      |
+------------+-------------+
| ACCOUNTING | 2916.666667 |
+------------+-------------+

解法二 : 使用max()

原理和上一题第二问大同小异。

复制代码
mysql> select b.dname,avg(a.sal) as avgsal from emp a join dept b on a.deptno=b.deptno group by b.dname having avgsal=(select max(t.avgsal) from (select avg(sal) as avgsal from emp group by deptno) t);
+------------+-------------+
| dname      | avgsal      |
+------------+-------------+
| ACCOUNTING | 2916.666667 |
+------------+-------------+

往期文章

MySQL基础练习题:习题456

MySQL基础练习题:习题2-3

MySQL基础练习题:创建数据库

相关推荐
夜雪一千3 小时前
MySQL 全局锁是什么?原理、风险、备份踩坑完整实战
android·mysql·adb
程序员夏洛7 小时前
MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?
数据库·mysql
l1258658 小时前
# RAG向量数据库优化实战:HNSW索引调参与生产级性能设计
数据库·python·mysql·langchain
梦Arrebol8 小时前
Mysql内容及相关实验
数据库·mysql
OceanWaves19939 小时前
mysql 8.0.32 磁盘爆满,清理从库日志
数据库·mysql
霸道流氓气质11 小时前
MySQL 大表 DDL 变更 — 原理、方案与实践
android·数据库·mysql
JavaPub-rodert11 小时前
Go 后台如何同时兼容 MySQL、PostgreSQL、SQLite 和 SQL Server?从 ShiyuAdmin 看 GORM 多数据库适配
数据库·mysql·postgresql·golang·javapub·王仕宇
Code额12 小时前
基于 SQLAlchemy 2.x,面向 MySQL 数据库的从入门到精通实战教程(2)
数据库·sql·mysql·adb·ai
爱吃火鸡面呀13 小时前
MySQL 查询与函数详解:从基础条件筛选到高级字符处理
数据库·mysql
知行产研13 小时前
中国矿山无人驾驶出海的三重门
数据库·mysql·php