El empleado mejor pagado del departamento

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
	)
;

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/GoSaint/article/details/112157646
Recomendado
Clasificación