Cómo seleccionar la fila con la columna máxima de otra subconsulta en Oracle
Básicamente estoy tratando de encontrar el máximo de un resultado de recuento. Aquí hay un ejemplo:
Resultado deseado: el nombre de los empleados con el mayor número de trabajos y el número de trabajos realizados.
Mis tablas (negrita significa clave primaria, * significa clave foránea):
- Employees (Id, nombre_empleado, …)
- Sites (Id_Sitio, nombre_sitio, …)
- Jobs (Id, Site_id*, Id*, FechaJ)
Aquí hay 2 cosas que intenté:
Consulta #1:
Select
nombre_empleado,
max(trabajos_realizados) max_trabajos
from
Employees E,
(select
id,
count(*) trabajos_realizados from jobs
from jobs
group by id) t
where
E.id = t.Id
group by
nombre_empleado;
Esto devuelve los trabajos máximos de cada empleado, lo cual es inútil ya que la subconsulta ya hace eso, y no es el resultado deseado.
Consulta #2:
Select
nombre_empleado,
t.trabajo_realizado
from
Employees E
(Select
id,
count(*) trabajo_realizado
from Jobs
group by id) t
where
E.id = t.id
order by
trabajo_realizado desc
fetch first row only;
Esto funciona en mi situación, pero no tiene en cuenta que varios empleados tengan el mismo máximo. ¿Hay una manera simple de resolver esto, obviamente sin cambiar el diseño de la base de datos y preferiblemente usando solo subconsultas (todavía soy un principiante)?
davy.ai
Para encontrar el nombre de los empleados con el mayor número de trabajos realizados y la cantidad de trabajos hechos, puedes utilizar la siguiente consulta:
Esta consulta une las tablas Employees y Jobs en la columna Id, luego agrupa los resultados por employee_name y cuenta la cantidad de trabajos realizados por cada empleado. Luego, los resultados se ordenan en orden descendente por jobs_done y la cláusula FETCH FIRST ROW WITH TIES devuelve todos los empleados con el mayor número de trabajos realizados (en caso de que haya múltiples empleados con la misma cantidad máxima).