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.

¿Encuentra el valor mínimo de un grupo de columnas basado en el valor de otra columna?

Este es para SQL Server. ¿Hay alguna forma de obtener el valor mínimo de solo un grupo seleccionado de columnas basado en el valor de otra columna? En este ejemplo, quiero encontrar la transacción mínima que cada Nombre tuvo y colocarla en la columna ‘Mínimo de transacción’. No puedo codificar el valor de ‘Nombre’. He intentado una subconsulta, pero no puedo entender cómo funcionaría la lógica.

SELECT ID, Nombre, Transacciones, Mínimo de transacción =
   (
   SELECT MIN(Transacciones) 
   FROM MiTabla M
   JOIN MiTabla N ON N.ID = M.ID
   )
FROM MiTabla N
WHERE Nombre = 'Sarah' OR Nombre = 'Sue' OR Nombre = 'Joe' OR Nombre ='Tim'

Resultado Esperado

ID Nombre Transacciones Mínimo de transacción
1 Sarah $5 $1
2 Sarah $1 $1
3 Sue $10 $4
4 Sue $4 $4
5 Sue $6 $4
6 Joe $4 $4
7 Tim $12 $12
8 Tim $14 $12
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de obtener el valor mínimo solo de un grupo selecto de columnas basado en el valor de otra columna en SQL Server. Un enfoque es utilizar una subconsulta con una función agregada para obtener el valor mínimo de transacción para cada nombre y luego unir ese resultado con la tabla original para filtrar las filas que no coinciden. La lógica funcionaría de la siguiente manera:

    SELECT N.ID, N.Name, N.Transactions, M.[Minimum Transaction]
    FROM MyTable N
    JOIN (
       SELECT Name, MIN(Transactions) AS [Minimum Transaction]
       FROM MyTable
       WHERE Name IN ('Sarah', 'Sue', 'Joe', 'Tim')
       GROUP BY Name
    ) M ON N.Name = M.Name AND N.Transactions = M.[Minimum Transaction]
    

    En esta consulta, primero utilizamos una subconsulta para obtener el valor mínimo de transacción para cada nombre en el que estamos interesados. Utilizamos la función MIN() para agregar la columna Transactions y la cláusula GROUP BY para agrupar por la columna Name. Esto nos da un conjunto de resultados con dos columnas, Name y Minimum Transaction.

    Luego unimos esta subconsulta con la tabla original (con el alias N) en las columnas Name y Transactions. Esto esencialmente filtra todas las filas donde el valor de transacción no es el mínimo para ese nombre. Finalmente, seleccionamos las columnas que queremos del conjunto de resultados unido, incluyendo la columna de Minimum Transaction de la subconsulta (con el alias M).

    El resultado esperado para los datos de muestra proporcionados se mostraría en la tabla de arriba.

Comments are closed.