Home > OS >  Find the minimum value of a group of columns based on the value of another column?
Find the minimum value of a group of columns based on the value of another column?

Time:12-23

This is for SQL Server. Is there a way to get the minimum value of only a select group of columns based on the value of another column? In this example, I want to find the minimum transaction that each Name had and place that in the 'Minimum Transaction' column. I cannot hard code the value of 'Name'. I have tried a subquery, but I can't wrap my head around how the logic would work.

SELECT ID, Name, Transactions, Minimum Transaction =
   (
   SELECT MIN(Transactions) 
   FROM MyTable M
   JOIN MyTable M ON N.ID = M.ID
   )
FROM MyTable N
WHERE Name = 'Sarah' OR 'Sue' OR 'Joe' OR 'Tim'

Expected Outcome

ID Name Transactions Minimum Transaction
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

CodePudding user response:

Use MIN(Transactions) OVER(PARTITION BY Name) :

SELECT ID, Name, Transactions, 
MIN(transactions) over (partition by Name) as "Minimum Transaction" from 
MyTable
order by id;

PARTITION BY as opposed to GROUP BY only affects the window function and doesn't affect the returned rows.

Fiddle

  • Related