Escriba un título de catálogo personalizado aquí
SQL clásico de Leecode
Título de Leecode. Acerca de la aplicación de in. Se siente muy clásico, aquí hay una lista del proceso de resolución de problemas.
Descripción del Título
La tabla Empleado contiene toda la información de los empleados y cada empleado tiene su correspondiente Id, salario e Id de departamento.
El SQL es el siguiente:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for employee
-- ----------------------------
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`Salary` int(255) NULL DEFAULT NULL,
`DepartmentId` int(255) NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of employee
-- ----------------------------
INSERT INTO `employee` VALUES (1, 'Joe', 70000, 1);
INSERT INTO `employee` VALUES (2, 'Jim', 90000, 1);
INSERT INTO `employee` VALUES (3, 'Henry', 80000, 2);
INSERT INTO `employee` VALUES (4, 'Sam', 60000, 2);
INSERT INTO `employee` VALUES (5, 'Max', 90000, 1);
SET FOREIGN_KEY_CHECKS = 1;
La tabla Departamento contiene información sobre todos los departamentos de la empresa.
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for department
-- ----------------------------
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of department
-- ----------------------------
INSERT INTO `department` VALUES (1, 'IT');
INSERT INTO `department` VALUES (2, 'Sales');
SET FOREIGN_KEY_CHECKS = 1;
Resolución de problemas
Método: use el
algoritmo de declaración JOIN e IN
Debido a que la tabla Empleado contiene los campos Salario y ID de departamento, podemos usar esto para consultar el salario más alto del departamento.
SELECT
DepartmentId, MAX(Salary)
FROM
Employee
GROUP BY DepartmentId;
Nota: Es posible que varios empleados tengan el salario más alto al mismo tiempo, por lo que es mejor no incluir la información del nombre del empleado en esta consulta.
DepartmentId | MAX (salario) |
---|---|
1 | 90000 |
2 | 80000 |
Luego, podemos conectar las tablas Empleado y Departamento, y usar la instrucción IN para consultar la relación entre el nombre del departamento y el salario en esta tabla temporal.
SELECT
Department.name AS 'Department',
Employee.name AS 'Employee',
Salary
FROM
Employee
JOIN
Department ON Employee.DepartmentId = Department.Id
WHERE
(Employee.DepartmentId , Salary) IN
( SELECT
DepartmentId, MAX(Salary)
FROM
Employee
GROUP BY DepartmentId
)
;