SQL - Impacto de Satisfacción al Cliente (Suplemento necesario?)

He estado teniendo algunos problemas SQL tratando de añadir una nueva columna a mi tabla que creo que depende de sub-queries para trabajar.

A continuación he compartido un enlace a una hoja de Google con algunos datos de ejemplo para demostrar lo que estoy tratando de lograr. https://docs.google.com/spreadsheets/d/1qaWZg4BEs8xOxG3jNZwKRcaOGfMiMtCb15IU3FQ9W0o/edit?usp=sharing

Diseño muy básico Tengo:

select
 team_member,
 language,
 channel,
 month,
 sum(total_customers),
 sum(happy_customers),
 safe_divide(sum(happy_customers),sum(total_customers)) AS Satisfaction_Score
FROM
 Table1
GROUP BY 1,2,3,4

Entiendo que lo anterior me conseguirá la puntuación de satisfacción para cada fila de team_member, lingüaje, canal, mes. Estoy tratando de añadir nuevas columnas al final de esto que podría conseguirme:

  • sum(total_customers) rolled up by language
  • Satisfacción_ Puntuación para el idioma compatible por team_member

Que podría utilizar para calcular el impacto de satisfacción, que se establece como:

(team member satisfaction score-language satisfaction score)*(team member total customers/language total customers)

Por desgracia ni siquiera me he acercado a la respuesta, esperando que un mago aquí sepa cómo se podría hacer?

Pregunta hecha hace 3 años, 4 meses, 28 días - Por pixelpioneerbbb5


3 Respuestas:

  • Puede utilizar funciones de ventana:

    select team_member, language, channel, month,
           sum(total_customers), sum(happy_customers),
           sum(sum(total_customers)) over (partition by team_member, language) as total_team_language,
           safe_divide(sum(sum(happy_customers)) over (partition by team_member, language),
                       sum(total_customers)over (partition by team_member, language)
                      ) AS Satisfaction_Score_team_language
    FROM Table1
    GROUP BY 1,2,3,4
    

    Respondida el Dec 18, 2020 a las 15:20 - por techtrailblazer

    Votos positivos: 0 | Votos negativos: 0

  • Para calcular el impacto de satisfacción según la fórmula que proporcionaste, necesitarías realizar una subconsulta para obtener la satisfacción por idioma y luego unir esta información con la consulta existente para calcular el impacto de satisfacción.

    Aquí te dejo un ejemplo de cómo podrías estructurar la consulta para lograrlo:

    sql
    WITH LanguageSatisfaction AS (
        SELECT
            language,
            SUM(total_customers) AS language_total_customers,
            SUM(happy_customers) AS language_happy_customers,
            SAFE_DIVIDE(SUM(happy_customers), SUM(total_customers)) AS language_satisfaction_score
        FROM
            Table1
        GROUP BY language
    ),
    TeamMemberSatisfaction AS (
        SELECT
            team_member,
            language,
            SUM(total_customers) AS team_member_total_customers,
            SUM(happy_customers) AS team_member_happy_customers,
            SAFE_DIVIDE(SUM(happy_customers), SUM(total_customers)) AS team_member_satisfaction_score
        FROM
            Table1
        GROUP BY team_member, language
    )
    SELECT
        t1.team_member,
        t1.language,
        t1.channel,
        t1.month,
        SUM(t1.total_customers) AS total_customers,
        SUM(t1.happy_customers) AS happy_customers,
        SAFE_DIVIDE(SUM(t1.happy_customers), SUM(t1.total_customers)) AS satisfaction_score,
        ls.language_total_customers,
        ls.language_satisfaction_score,
        (SAFE_DIVIDE(SUM(t1.happy_customers), SUM(t1.total_customers)) - ls.language_satisfaction_score) * (SUM(t1.total_customers) - ls.language_total_customers) AS impact_of_satisfaction
    FROM
        Table1 t1
    JOIN LanguageSatisfaction ls ON t1.language = ls.language
    GROUP BY t1.team_member, t1.language, t1.channel, t1.month, ls.language_total_customers, ls.language_satisfaction_score
    

    En este ejemplo, se utilizan subconsultas comunes (WITH) para calcular la satisfacción por idioma y por miembro del equipo. Luego, se unen esas subconsultas con la tabla original y se calcula el impacto de satisfacción según la fórmula proporcionada.

    Por favor, adapta este ejemplo a tu estructura y datos reales para obtener el resultado deseado. ¡Espero que esta solución te ayude a resolver tu problema!

    Respondida el Dec 19, 2020 a las 15:22 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para añadir las columnas adicionales y calcular el impacto de satisfacción, puedes utilizar una consulta SQL como esta:

    sql
    SELECT
        team_member,
        language,
        channel,
        month,
        SUM(total_customers) AS total_customers,
        SUM(happy_customers) AS happy_customers,
        SAFE_DIVIDE(SUM(happy_customers), SUM(total_customers)) AS Satisfaction_Score,
        (
            SAFE_DIVIDE(SUM(happy_customers), SUM(total_customers)) -
            (
                SELECT SAFE_DIVIDE(SUM(happy_customers), SUM(total_customers))
                FROM Table1
                WHERE language = t.language
            )
        )  (
            SUM(total_customers) / (
                SELECT SUM(total_customers)
                FROM Table1
                WHERE language = t.language
            )
        ) AS Impact_Score
    FROM
        Table1 t
    GROUP BY
        1, 2, 3, 4;
    

    Explicación:

    La subconsulta en la expresión Impact_Score calcula la puntuación de satisfacción del idioma compatible para cada miembro del equipo. La otra subconsulta calcula el total de clientes para cada idioma. El cálculo del Impact_Score utiliza la fórmula proporcionada para calcular el impacto de satisfacción.

    Uso:

    Puedes ejecutar esta consulta en tu base de datos para obtener los resultados deseados. Las columnas adicionales total_customers y Impact_Score se añadirán a los resultados.

    Nota:

    Asegúrate de que la función SAFE_DIVIDE() esté implementada en tu base de datos. Si no es así, puedes utilizar la función COALESCE() para manejar la división por cero. También puedes ajustar la consulta según tus necesidades específicas, como filtrar por fechas o aplicar criterios de agrupación adicionales.

    Respondida el Dec 19, 2020 a las 15:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0