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.

Devuelva en SQL 4 columnas que solo incluyan el salario máximo y mínimo de cada departamento etiquetado como “salario más alto” y “salario más bajo” utilizando CASE.

Esto es vergonzoso, y he estado debatiendo si incluso debería molestarlos con esto. Cada aspecto de este mensaje va a demostrar lo novato que soy en esto, así que por favor acepten mis disculpas de antemano. Estoy aprendiendo SQL y durante los últimos días he estado tratando de resolver este problema de tarea. Se supone que debo escribir una consulta usando una subconsulta correlacionada y expresiones condicionales CASE para devolver 4 columnas de mi tabla “empleado”: departamento, primer nombre, salario y bajo la última columna “salario_en_departamento” si el salario es el “MÁS ALTO” o el “MÁS BAJO”. Por lo tanto, se supone que debo devolver solo dos salarios para cada departamento, solo el SALARIO MÁS ALTO y el SALARIO MÁS BAJO.

He estado cambiando esta y aquella parte de mi consulta, obteniendo errores cada vez o todos los salarios para cada departamento devueltos como SALARIO MÁS ALTO en la cuarta columna de “salario_en_departamento”. He buscado todo lo que puedo pensar en línea, desde “cómo consultar tanto el salario mínimo como máximo para cada departamento en la misma instrucción SELECT SQL” hasta “error de alias de subconsulta SQL” hasta “salario mínimo y máximo para cada departamento en SQL” hasta “salario mínimo y máximo usando CASE” hasta “salario mínimo y máximo para cada departamento usando subconsultas SQL”, etc.

Este es mi último intento:

SELECT departamento, primer_nombre, salario, a.salario_en_departamento
FROM (SELECT departamento, primer_nombre, salario,
CASE WHEN salario = MIN(salario) THEN ‘SALARIO MÁS BAJO’
WHEN salario = MAX(salario) THEN ‘SALARIO MÁS ALTO’
END as salario_en_departamento
FROM empleados
GROUP BY departamento, primer_nombre, salario) a
GROUP BY departamento, primer_nombre, salario, salario_en_departamento
ORDER BY departamento

¿Alguna sugerencia sobre cómo hacerlo o cómo investigar mejor por mi cuenta para no tener que molestar a la gente aquí con preguntas básicas, por favor? O si estoy cometiendo errores al publicar, por favor háganmelo saber también. Entre todas las respuestas aquí en stackoverflow a mis búsquedas en Google, no he sido capaz de adaptar las piezas a mi situación particular.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Estimado estudiante,

    Gracias por compartir su problema con nosotros. Es completamente comprensible sentirse abrumado al aprender una nueva habilidad, así que no se preocupe demasiado. Aquí está una versión revisada de su consulta que debería devolver los resultados deseados:

    SELECT departamento, 
           nombre, 
           salario,
           CASE 
             WHEN salario = d.salario_maximo THEN 'SALARIO MÁS ALTO'
             WHEN salario = d.salario_minimo THEN 'SALARIO MÁS BAJO'
           END AS salario_en_departamento
    FROM empleados e
    JOIN (SELECT departamento, 
                 MAX(salario) AS salario_maximo,
                 MIN(salario) AS salario_minimo
          FROM empleados
          GROUP BY departamento) d
    ON e.departamento = d.departamento
    WHERE salario = d.salario_maximo OR salario = d.salario_minimo
    ORDER BY departamento, salario DESC
    

    Aquí hay algunas explicaciones de los cambios que hice:

    1. En lugar de usar una subconsulta en la cláusula SELECT, creé una tabla derivada (d) para obtener los salarios máximos y mínimos para cada departamento.
    2. Uní la tabla de empleados con la tabla derivada en la columna de departamento.
    3. Agregué una cláusula WHERE para incluir solo las filas con los salarios más altos o más bajos para cada departamento.
    4. Cambié el orden del GROUP BY y agregué una cláusula ORDER BY para asegurarme de que los resultados estén ordenados por departamento y luego por salario en orden descendente.

    ¡Espero que esto ayude! Si tiene más preguntas o dificultades, no dude en comunicarse con nosotros.

    Saludos cordiales,
    [Su nombre]

Comments are closed.