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.

Manteniendo columnas adicionales mientras se utiliza MIN o MAX con Group By

Primera vez que publico en stackoverflow, soy nuevo en SQL (y en cualquier código en general), agradecería algunos consejos sobre una consulta group by que tengo. Con base en el siguiente conjunto de datos de muestra, estoy buscando agrupar por ID/Nombre y devolver las ventas mínimas de cada persona. La dificultad que tengo es que también quiero devolver la información de REGIÓN y QTR asociada con el rendimiento de ventas más bajo.

ID NOMBRE REGIÓN VENTAS QTR.
1 Luke NORTE 45 1
2 Danny OESTE 67 2
3 Elle NORTE 73 1
1 Luke OESTE 32 4
2 Danny ESTE 22 3
2 Danny ESTE 18 2

Entonces, básicamente agrupo en una tabla como se muestra a continuación

ID NOMBRE REGIÓN VENTAS MÍNIMAS QTR.
1 Luke OESTE 32 4
2 Danny ESTE 18 2
3 Elle NORTE 73 1

Si añado las columnas adicionales en el group by, se crean múltiples filas para cada individuo, si las omito, pierdo los datos asociados.

¿Alguien puede ayudar? Por lo que he visto en línea, parece que podría tener que unir la tabla consigo misma, aunque no estoy seguro de cómo hacerlo.

Gracias.

Tom

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    ¡Hola Tom!

    Puedes lograr esto utilizando una auto unión. Una auto unión es cuando unes una tabla consigo misma basándote en una columna común. En este caso, uniremos la tabla por ID/Nombre y compararemos los valores de ventas para encontrar las ventas mínimas.

    Puedes probar la siguiente consulta:

    SELECT t1.ID, t1.NOMBRE, t1.REGION, t1.VENTAS AS 'VENTAS MÍNIMAS', t1.TRIMESTRE
    FROM datos_de_ejemplo t1
    JOIN (
        SELECT ID, NOMBRE, MIN(VENTAS) AS 'VENTAS MÍNIMAS'
        FROM datos_de_ejemplo
        GROUP BY ID, NOMBRE
    ) t2 ON t1.ID = t2.ID AND t1.NOMBRE = t2.NOMBRE AND t1.VENTAS = t2.'VENTAS MÍNIMAS'
    

    Permíteme explicar qué hace esta consulta paso a paso:

    1. La consulta interna selecciona las ventas mínimas para cada grupo de ID/Nombre.
    2. En la consulta externa, unimos la tabla consigo misma en las columnas ID/Nombre.

    3. Comparamos el valor de ventas en la tabla unida con el valor de ventas mínimas de la consulta interna.

    4. Si coinciden, seleccionamos la fila de la tabla externa y devolvemos el resultado.

    Esto debería darte el resultado deseado. Avísame si tienes alguna otra consulta o duda.

    ¡Feliz aprendizaje!

    Saludos,

    [Tu Nombre]

Comments are closed.