ホームページ > データベース > mysql チュートリアル > SQL Server の複数の列にわたる最小値を効率的に見つけるにはどうすればよいですか?

SQL Server の複数の列にわたる最小値を効率的に見つけるにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-10 09:07:12
オリジナル
1103 人が閲覧しました

How to Efficiently Find the Minimum Value Across Multiple Columns in SQL Server?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート