目录
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
);
我习惯性的喜欢在一个查询语句后面加上一个分号结束,开始我就加上了分号
但是会报错,会默认在分号那里结束。