Todos los empleados con los tres salarios más altos en el departamento de Leecode

Titulo original

EmployeeLa siguiente tabla contiene información sobre todos los empleados, cada empleado tiene su número de trabajo correspondiente Id, nombre Name, salario Salaryy número de departamento DepartmentId.

+----+-------+--------+--------------+
| Id | Name  | Salary | DepartmentId |
+----+-------+--------+--------------+
| 1  | Joe   | 85000  | 1            |
| 2  | Henry | 80000  | 2            |
| 3  | Sam   | 60000  | 2            |
| 4  | Max   | 90000  | 1            |
| 5  | Janet | 69000  | 1            |
| 6  | Randy | 85000  | 1            |
| 7  | Will  | 70000  | 1            |
+----+-------+--------+--------------+

Department La tabla contiene información sobre todos los departamentos de la empresa.

+----+----------+
| Id | Name     |
+----+----------+
| 1  | IT       |
| 2  | Sales    |
+----+----------+

Escriba una consulta SQL para encontrar todos los empleados de cada departamento que recibieron los tres salarios más altos. Por ejemplo, de acuerdo con la tabla anterior, el resultado de la consulta debería devolver:

+------------+----------+--------+
| Department | Employee | Salary |
+------------+----------+--------+
| IT         | Max      | 90000  |
| IT         | Randy    | 85000  |
| IT         | Joe      | 85000  |
| IT         | Will     | 70000  |
| Sales      | Henry    | 80000  |
| Sales      | Sam      | 60000  |
+------------+----------+--------+

Explicación:

En el departamento de TI, Max recibió el salario más alto, Randy y Joe recibieron el segundo salario más alto y el salario de Will ocupó el tercer lugar. El departamento de ventas (Ventas) tiene solo dos empleados, Henry tiene el salario más alto y Sam tiene el segundo salario más alto.

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/department-top-three-salaries Los
derechos de autor son propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Solucion 1

Los 3 mejores salarios de la empresa significan que no hay más de 3 salarios superiores a estos valores.

select e1.Name as 'Employee', e1.Salary
from Employee e1
where 3 >
(
    select count(distinct e2.Salary)
    from Employee e2
    where e2.Salary > e1.Salary
)
;

En este código, hemos contado cuántas personas tienen salarios más altos que e1.Salary, por lo que la salida de la muestra debería ser la siguiente.

| Employee | Salary |
|----------|--------|
| Henry    | 80000  |
| Max      | 90000  |
| Randy    | 85000  |

Luego, necesitamos unir la tabla Empleado y la tabla Departamento para obtener información del departamento.

SELECT
    d.Name AS 'Department', e1.Name AS 'Employee', e1.Salary
FROM
    Employee e1
        JOIN
    Department d ON e1.DepartmentId = d.Id
WHERE
    3 > (SELECT
            COUNT(DISTINCT e2.Salary)
        FROM
            Employee e2
        WHERE
            e2.Salary > e1.Salary
                AND e1.DepartmentId = e2.DepartmentId
        )
;
| Department | Employee | Salary |
|------------|----------|--------|
| IT         | Joe      | 70000  |
| Sales      | Henry    | 80000  |
| Sales      | Sam      | 60000  |
| IT         | Max      | 90000  |
| IT         | Randy    | 85000  |

Supongo que te gusta

Origin blog.csdn.net/weixin_42072754/article/details/109386978
Recomendado
Clasificación