【问题标题】:Find the minimum value of a group of columns based on the value of another column?根据另一列的值找到一组列的最小值?
【发布时间】:2022-01-23 21:09:38
【问题描述】:

这适用于 SQL Server。有没有办法根据另一列的值仅获取一组选定列的最小值?在此示例中,我想找到每个 Name 拥有的最小事务并将其放在“Minimum Transaction”列中。我无法硬编码“名称”的值。我尝试了一个子查询,但我无法理解逻辑是如何工作的。

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'

预期结果

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

【问题讨论】:

  • 使用带窗口的MIN。请参阅文档的example

标签: sql sql-server subquery


【解决方案1】:

使用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 相对于GROUP BY 只影响窗口函数,不影响返回的行。

Fiddle

【讨论】:

  • 完美,有道理。非常感谢。
  • 您不需要子查询/派生表或连接,我认为您的意思是WHERE Name IN ('Sarah', 'Sue', 'Joe', 'Tim')。您的小提琴中的查询是正确的
  • @Charlieface 你说得对,我没有认真阅读 OP 的代码,我以为他使用了一些连接来获取(id,name transactions)所以我只添加了相关部分。修正了我的答案,谢谢!
猜你喜欢
  • 2021-07-25
  • 2014-10-05
  • 2023-01-26
  • 2020-08-09
  • 2021-10-16
  • 2021-02-22
  • 2023-03-23
  • 2021-05-25
  • 1970-01-01
相关资源
最近更新 更多