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.

no se obtienen todos los rangos en la tabla de distribución

Hola, tengo una tabla que usaré para mostrar una curva de distribución. Entonces, las columnas de la tabla son las siguientes.

Emp_Dept, Salary_Bucket, Emp_in_range
finance, 10K-15K, 45%
Finance, 15K-25K, 40%
Finance, 25K-30K, 15%
HR, 25K-30K, 100%

Aquí está el problema, cuando selecciono los datos del departamento de finanzas, muestra los 3 grupos, pero cuando seleccionamos el departamento de recursos humanos, solo muestra 1 grupo salarial, pero según los requisitos, necesitamos los 3 grupos y en los otros grupos, “Emp_in_range” será 0%. ¿Hay alguna manera de mostrar también las otras 2 filas para el departamento de recursos humanos con los grupos salariales restantes, como en la salida?

Emp_Dept, Salary_Bucket, Emp_in_range
finance, 10K-15K, 45%
Finance, 15K-25K, 40%
Finance, 25K-30K, 15%
HR, 25K-30K, 100%
HR, 10K-15K, 0%
HR, 15K-25K, 0%

¿Puedo intentarlo con CTE? He intentado con declaraciones CASE pero no funcionan. Por favor, ayuda.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes lograr esto utilizando una Expresión de Tabla Común (CTE).

    Puedes comenzar seleccionando todos los distintos grupos de salario de la tabla y hacer un cruce con los distintos departamentos de empleados para obtener todas las combinaciones posibles. Luego, puedes hacer una unión izquierda con la tabla original basada en las columnas de grupo de salario y departamento. Finalmente, puedes utilizar la función COALESCE para reemplazar los valores NULL con 0%.

    Aquí tienes un ejemplo de consulta:

    CON all_combinations AS (
        SELECT DISTINCT Emp_Dept, Salary_Bucket
        FROM your_table
        CROSS JOIN (
            SELECT DISTINCT Salary_Bucket
            FROM your_table
        ) sb
    )
    
    SELECT ac.Emp_Dept, ac.Salary_Bucket, COALESCE(yt.Emp_in_range, 0) AS Emp_in_range
    FROM all_combinations ac
    LEFT JOIN your_table yt ON ac.Emp_Dept = yt.Emp_Dept AND ac.Salary_Bucket = yt.Salary_Bucket
    ORDER BY ac.Emp_Dept, ac.Salary_Bucket
    

    Esto debería darte la salida deseada con todos los grupos de salario para el departamento de RRHH, y una distribución de empleados del 0% para los dos grupos adicionales.

Comments are closed.