ホームページ > データベース > mysql チュートリアル > CASE WHEN と SUM() を使用して SQL で列をピボットする方法

CASE WHEN と SUM() を使用して SQL で列をピボットする方法

Mary-Kate Olsen
リリース: 2025-01-11 15:51:46
オリジナル
687 人が閲覧しました

How to Pivot a Column in SQL Using CASE WHEN and SUM()?

CASE WHEN と SUM() を使用して SQL で列をピボットする

データ変換では、多くの場合、テーブルの再形成、データの行から列への移動、つまりピボットと呼ばれるプロセスが必要になります。 この例では、CASE WHENSUM().

を使用して SQL で列をピボットする方法を示します。

「Bank」という名前のサンプル テーブルを考えてみましょう:

<code class="language-sql">Bank:
name  val   amount
John   1     2000
Peter  1     1999
Peter  2     1854
John   2     1888</code>
ログイン後にコピー

私たちの目標は、このテーブルを次の形式に変換することです:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854</code>
ログイン後にコピー
ログイン後にコピー

単純なケースが失敗する理由

CASE WHEN のみを使用した単純なアプローチは次のようになります:

<code class="language-sql">SELECT name,
CASE WHEN val = 1 THEN amount ELSE 0 END AS amountVal1,
CASE WHEN val = 2 THEN amount ELSE 0 END AS amountVal2
FROM bank;</code>
ログイン後にコピー

これにより、誤った結果が生成されます:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        0
Peter   1999        0
John    0          1888
Peter   0          1854</code>
ログイン後にコピー

問題は、各行が独立して扱われることです。 結果を集計する必要があります。

SUM() による正しい解決策

解決策は、SUM() 集計関数を使用して、amountname の各組み合わせの val 値を合計することです。

<code class="language-sql">SELECT 
  name,
  SUM(CASE WHEN val = 1 THEN amount ELSE 0 END) AS amountVal1,
  SUM(CASE WHEN val = 2 THEN amount ELSE 0 END) AS amountVal2
FROM bank
GROUP BY name;</code>
ログイン後にコピー

このクエリはピボットテーブルを正しく生成します:

<code class="language-sql">name  amountVal1 amountVal2
John    2000        1888
Peter   1999        1854</code>
ログイン後にコピー
ログイン後にコピー

GROUP BY name 句は、SUM() 関数が一意の名前ごとに金額を集計することを保証します。 CASE WHEN ステートメントは、条件付きで金額を適切な列 (amountVal1amountVal2) に割り当て、指定された名前に特定の val が存在しない場合を、デフォルト値として 0 を使用して処理します。 この手法は、SQL で列のピボットを実行するための簡潔かつ効率的な方法を提供します。

以上がCASE WHEN と SUM() を使用して SQL で列をピボットする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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