ホームページ > データベース > mysql チュートリアル > 集計関数を使用せずにテーブルをピボットするにはどうすればよいですか?

集計関数を使用せずにテーブルをピボットするにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-20 09:47:08
オリジナル
418 人が閲覧しました

How Can I Pivot a Table Without Using Aggregate Functions?

集計関数を使用しないピボット テーブルのデータ変換

データ処理の分野では、より使いやすい、または分析に便利な形式にデータを再形成する必要がある場合があります。これを実現するための最も一般的な手法の 1 つはピボットです。ピボットでは、データがより広いレイアウトに変換されます。ピボット処理には通常、集計値が含まれますが、集計関数を使用せずに実行することもできます。

次の表について考えてみましょう:

<code class="language-sql">CREATE TABLE Data (
  CustomerID int,
  DBColumnName varchar(50),
  Data varchar(50)
);

INSERT INTO Data (CustomerID, DBColumnName, Data)
VALUES
  (1, 'FirstName', 'Joe'),
  (1, 'MiddleName', 'S'),
  (1, 'LastName', 'Smith'),
  (1, 'Date', '12/12/2009'),
  (2, 'FirstName', 'Sam'),
  (2, 'MiddleName', 'S'),
  (2, 'LastName', 'Freddrick'),
  (2, 'Date', '1/12/2009'),
  (3, 'FirstName', 'Jaime'),
  (3, 'MiddleName', 'S'),
  (3, 'LastName', 'Carol'),
  (3, 'Date', '12/1/2009');</code>
ログイン後にコピー

このテーブルには複数の顧客のデータが含まれており、各レコードは特定の属性 (名、ミドルネーム、姓、日付) とそれに関連付けられた値を表します。目標は、このデータをより読みやすい形式にピボットすることです:

<code class="language-sql">CREATE TABLE PivotedData (
  CustomerID int,
  FirstName varchar(50),
  MiddleName varchar(50),
  LastName varchar(50),
  Date varchar(50)
);

INSERT INTO PivotedData (CustomerID, FirstName, MiddleName, LastName, Date)
VALUES
  (1, 'Joe', 'S', 'Smith', '12/12/2009'),
  (2, 'Sam', 'S', 'Freddrick', '1/12/2009'),
  (3, 'Jaime', 'S', 'Carol', '12/1/2009');</code>
ログイン後にコピー

この変換 はデータを 集計しないことに注意することが重要です。代わりに、各顧客の各属性の一意の値が保持されます。

集計関数を使用せずにこの変換を実現するには、グループ化された SELECT ステートメントで CASE 式を使用できます。

<code class="language-sql">SELECT
  CustomerID,
  MIN(CASE DBColumnName WHEN 'FirstName' THEN Data END) AS FirstName,
  MIN(CASE DBColumnName WHEN 'MiddleName' THEN Data END) AS MiddleName,
  MIN(CASE DBColumnName WHEN 'LastName' THEN Data END) AS LastName,
  MIN(CASE DBColumnName WHEN 'Date' THEN Data END) AS Date
FROM Data
GROUP BY CustomerID;</code>
ログイン後にコピー

このクエリは、一連の CASE 式を使用して、各顧客の各属性に関連付けられた値を条件付きで選択します。 MIN() 関数は、指定された条件を満たす単一の値を取得するために使用され、属性ごとに 1 つの値のみが含まれるようにします。 CustomerID ごとに結果をグループ化することで、対応する属性と値を含む各顧客の行を作成します。

この手法により、集計関数を使用せずにデータを柔軟にピボットすることができます。これは、データの変換が最小限で済み、元の値を保存する必要がある場合に特に役立ちます。

以上が集計関数を使用せずにテーブルをピボットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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