es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  , , , ,

Answer

  1. Avatar for 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:

    SELECT e.employee_name, COUNT(*) AS jobs_done
    FROM Employees e
    JOIN Jobs j ON e.Id = j.Id
    GROUP BY e.employee_name
    ORDER BY jobs_done DESC
    FETCH FIRST ROW WITH TIES;
    

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

Comments are closed.