O de la comunidad, ¿sabes cómo podría seleccione el department_ID, y el salario más bajo del departamento con el mayor salario promedio? O cómo eliminar la ORA-00934: función de grupo no se permite aquí’ problema? Necesito usar dos subconsultas?

Tan lejos, esto es lo que yo he venido para arriba con, tratando de obtener la department_ID de los mejor pagados departamento:

SELECT department_ID, MIN(salary
FROM employees
WHERE department_ID = (SELECT department_ID
    FROM employees WHERE salary = MAX(salary));

Gracias, su ayuda es muy apreciada.

InformationsquelleAutor | 2012-03-14

2 Comentarios

  1. 0

    Yo no puedo probar esto, pero debería funcionar:

    ;WITH DepartmentsSalary AS
    (
        SELECT department_ID, AVG(Salary) AvgSalary, MIN(Salary) MinSalary
        FROM employees
        GROUP BY department_ID
    )
    SELECT department_ID, MinSalary
    FROM (  SELECT department_ID, AvgSalary, MAX(AvgSalary) OVER() MaxSalary, MinSalary
            FROM DepartmentsSalary) D
    WHERE MaxSalary = AvgSalary
    • Yo sé que usted ha mencionado usted no puede probar el problema, pero la solución no funcionó. Devuelve: Error en la Línea 10: ORA-00904: «AVGSALARY»: identificador no válido.
    • Estás en lo correcto. He actualizado mi respuesta, quiero saber si ayuda
    • Oracle necesidades de la declaración carácter de terminación (el ;) en el final, no en el principio de la instrucción.
    • Gracias, tu respuesta funciona a la perfección. +1
  2. 0

    Puede utilizar la combinación (a continuación, sólo tiene una sub consulta)

    select e1.department_ID, min(e1.salary)
    from employees e1
    join (
        select avg_query.department_ID, max(avg_query.avg_value) 
        from (
            select department_ID, avg(salary) as avg_value
            from employees
            group by department_ID
        ) avg_query
    ) e2 on e2.department_ID = e1.department_ID
    ;
    • Primer sub-consulta devuelve salario promedio para todos los departamentos
    • Siguiente sub-consulta basada en la sub-consulta devuelve el promedio más alto de
      salario y relacionados con department_ID
    • Principal de la consulta devuelve min sueldo para department_ID con el promedio más alto de
      salario
    • Su primera solución sólo se necesita el empleado con el máximo de salario, no es el departamento con el máximo salario promedio de todos. Su segunda consulta no elegir el departamento con el máximo de salario o bien, sólo se necesita cada departamento, y calcula el máximo salario de cada
    • Me olvidé de más alto salario promedio’. Ahora la segunda consulta devuelva resultados correctos. Si pone «select a, max(b) de c’ sin ‘grupo’ de la consulta devuelve una sola fila. He quitado la primera consulta porque de este fragmento: FROM empleados where salario = (SELECT MAX(avg_dataSet.avg_salary)

Dejar respuesta

Please enter your comment!
Please enter your name here