SQL Server:高效查找多列中的最小值
查找 SQL Server 表中多个列的最小值是一项常见的数据分析任务。 本文介绍了实现这一目标的有效方法,重点关注 SQL Server 2005 及更高版本。
假设一个表包含“Col1”、“Col2”和“Col3”列。 我们的目标是创建一个新列“TheMin”,其中包含每行这三列的最小值。
方法一:使用CASE表达式
一种简单的方法是使用 CASE 表达式来比较列值并分配最小值。 这对于少量列来说是有效的:
<code class="language-sql">SELECT Id, CASE WHEN Col1 < Col2 AND Col1 < Col3 THEN Col1 WHEN Col2 < Col1 AND Col2 < Col3 THEN Col2 ELSE Col3 END AS TheMin FROM YourTableNameHere;</code>
此 CASE 语句比较值并选择最小的。
方法 2:对多列使用 UNPIVOT
在处理许多列时,UNPIVOT 运算符提供了更具可扩展性的解决方案。 UNPIVOT 将多列转换为单列,以便轻松聚合:
<code class="language-sql">WITH cte (ID, Col1, Col2, Col3) AS ( SELECT ID, Col1, Col2, Col3 FROM TestTable ) SELECT cte.ID, Col1, Col2, Col3, TheMin FROM cte JOIN ( SELECT ID, MIN(Amount) AS TheMin FROM cte UNPIVOT (Amount FOR AmountCol IN (Col1, Col2, Col3)) AS unpvt GROUP BY ID ) AS minValues ON cte.ID = minValues.ID;</code>
UNPIVOT 重塑数据,然后 MIN() 找到每个 ID 组内的最小值。 结果被连接回原始表。 与嵌套 CASE 语句相比,此方法具有更多的列数,因此更易于维护和高效。
以上是如何在SQL Server中高效查找多列的最小值?的详细内容。更多信息请关注PHP中文网其他相关文章!