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中文網其他相關文章!