SQL Server: 複数の列にわたる最小値を効率的に見つける
SQL Server テーブル内の複数の列の最小値を見つけることは、一般的なデータ分析タスクです。 この記事では、SQL Server 2005 以降に焦点を当てて、これを実現するための効率的な方法を紹介します。
テーブルに列「Col1」、「Col2」、「Col3」があるとします。 私たちの目標は、各行のこれら 3 つの列の最小値を含む新しい列「TheMin」を作成することです。
方法 1: 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 は複数の列を 1 つの列に変換し、簡単に集計できるようにします。
<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 中国語 Web サイトの他の関連記事を参照してください。