ホームページ  >  記事  >  データベース  >  MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

黄舟
黄舟オリジナル
2017-03-25 13:26:221336ブラウズ

以下のエディターは、記事 mysql 列を行に変換し、フィールドを結合する方法 (必読) を提供します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして一緒に見てみましょう

データテーブル:

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

列切り替え: max(case when then)を使用します

max---集計関数を取得するには最大値

(case course when '中文' then得点 else 0 end) ---中国語としての判定

---列名としてのエイリアス

SELECT
 `name`,
 MAX(
  CASE 
  WHEN course='语文' THEN
   score
  END
 ) AS 语文,
 MAX(
  CASE 
  WHEN course='数学' THEN
   score
  END
 ) AS 数学, 
 MAX(
  CASE 
  WHEN course='英语' THEN
   score
  END
 ) AS 英语
FROM
 student
GROUP BY `name`
;

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

マージフィールドの表示: use group_cancat(course,": "," スコア")

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

group_concat()、マニュアルには次のように記載されています: この関数は、グループの連結から非 NULL 値を持つ string 結果を返します。
比較的抽象的で理解しにくい。

簡単に理解すると、実際は次のようになります。 group_concat() は、どの行が同じグループに属するかを計算し、同じグループに属する列を表示します。どの列を返すかは、関数のパラメーター (つまり、フィールド名) によって決まります。グループ化には、group by で指定された列に基づいてグループ化するという基準が必要です。

group_concat 関数は内部で group by ステートメントを実行する必要があります。これは私の推測です。

1. テストステートメント:

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
GROUP BY
 `name`;
結果は、名前が同じである値を見つけ、次のようにすべてをカンマで区切ってリストします。 group_concat('name')

2. テスト:MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

SELECT
 GROUP_CONCAT(`name`)
FROM
 student
;
結果:

group_concat('name')

group_concat は次の場合にのみ証明されますgroup by ステートメントを同時に使用すると効果的ですか? 実際のテストは以下で実行されます

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)

3. group_concat() に対する

constants

の構成の影響をテストします:

SET @@GROUP_CONCAT_MAX_LEN=4
マニュアルには設定の構文は次のとおりです:
SET [SESSION | GLOBAL] group_concat_max_len = val;

この 2 つの違いは何ですか?

SET @@global.GROUP_CONCAT_MAX_LEN=4;
global可以省略,那么就变成了:SET @@GROUP_CONCAT_MAX_LEN=4;
4. ステートメントを使用します

SELECT
GROUP_CONCAT(`name`)
FROM
student;
結果は次のようになります:
group_concat('name')

MySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)結論:

group_concat() 関数group by ステートメントと一緒に使用する必要があります併用すると必要な効果が得られます。

その理由は次のように理解できます: group_concat() はグループ x に属するすべてのメンバーを取得します (関数内の列パラメーターはどのフィールドを表示する必要があるかを指定します)。グループXはどこから来たのですか? 指定する group by がない場合、 group_concat() がどのグループに従ってメンバーを表示するかを知る方法はありません。 したがって、上記のようにgroup by句がない場合は、劉備、関羽、張飛、劉備、関羽、張飛、劉備、関羽、張飛が表示されます。

実際にこの機能を使用する必要があるのはどのような場合ですか?


クエリ
が必要な場合、結果は次のようになります: グループ名が左側に表示され、グループの下にあるすべてのメンバー情報が右側に表示されます。この機能を使うと色々なものを保存することができます。

また、次のように使用しても:

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
;
あまり意味がありません。列を指定する group_concat() が最良のケースです。複数の列が指定されている場合。

SELECT
 `name`,
 GROUP_CONCAT(course, ":", score) AS 成绩
FROM
 student
GROUP BY
 `name`;

すると、表示される結果は次のようになります:

group_concat(course,":",score)

以上がMySQLのカラムを行に変換してフィールドを結合する方法を詳しく解説(画像とテキスト)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。