力扣(数据库自己建表 181. 超过经理收入的员工,182. 查找重复的电子邮箱,184. 部门工资最高的员工)

这篇博客探讨了LeetCode的三个问题:181题关注员工收入是否超过其经理;182题涉及查找数据库中重复的电子邮箱;184题讨论如何找到每个部门工资最高的员工。在解决这些问题时,重点在于有效地使用数据库查询,尤其是在处理分号结束查询时需要注意避免错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

181. 超过经理收入的员工

182. 查找重复的电子邮箱

184. 部门工资最高的员工


181. 超过经理收入的员工

 

 两次用到了employees表

 CREATE TABLE employees1(
	Id INT,
	NAME VARCHAR(20),
	Salary DOUBLE,
	ManagerId INT
 );
 
 INSERT INTO employees1 VALUES
 (1,'Joe',70000,3),(2,'Henry',80000,4),(3,'Sam',60000,NULL),(4,'Max',90000,NULL);
 
 学到了存储过程,所以用了存储过程
 DELIMITER $
 CREATE PROCEDURE emp1()
 BEGIN
	SELECT e.`Name`
	FROM employees1 e
	JOIN employees1 m
	ON e.`ManagerId`=m.`Id`
	WHERE e.`Salary`>m.`Salary`;
 END $
 
 CALL emp1()

182. 查找重复的电子邮箱

 

代码

 CREATE TABLE person(
	id INT,
	email VARCHAR(20)
 );
 INSERT INTO person VALUES
 (1,'a@b.com'),(2,'c@d.com'),(3,'a@b.com');
 
 SELECT email
 FROM person
 GROUP BY email
 HAVING COUNT(email)>1;

184. 部门工资最高的员工

 

 这里容易遗漏,可以看到上面有两个人的最高工资一样

 代码

 CREATE TABLE employees2(
	Id INT,
	NAME VARCHAR(20),
	Salary DOUBLE,
	DepartmentId INT
 );
 
 INSERT INTO employees2 VALUES
 (1,'Joe',70000,1),(2,'Jim',90000,1),(3,'Henry',80000,2),(4,'Sam',60000,2),(5,'Max',90000,1);
 
 CREATE TABLE department(
	id INT,
	depName VARCHAR(25)
 );
 INSERT INTO department VALUES
 (1,'IT'),(2,'Sales');
 
 
 SELECT d.depName '部门名',e.name '员工名',Salary
 FROM `department` d
 JOIN `employees2` e
 ON d.id=e.departmentId
 WHERE (departmentId,Salary) IN (
	SELECT e.departmentId,MAX(e.Salary)
	 FROM employees2 e
	 GROUP BY e.departmentId
 );

我习惯性的喜欢在一个查询语句后面加上一个分号结束,开始我就加上了分号

 但是会报错,会默认在分号那里结束。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值