以下のエディターは、記事 mysql 列を行に変換し、フィールドを結合する方法 (必読) を提供します。編集者はこれが非常に良いものだと思ったので、皆さんの参考として今から共有します。エディターをフォローして一緒に見てみましょう
データテーブル:
列切り替え: max(case when then)を使用します
(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` ;
マージフィールドの表示: use group_cancat(course,": "," スコア")
SELECT `name`, GROUP_CONCAT(course, ":", score) AS 成绩 FROM student GROUP BY `name`;
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. テスト:
SELECT GROUP_CONCAT(`name`) FROM student ;結果:
group_concat('name')
group_concat は次の場合にのみ証明されますgroup by ステートメントを同時に使用すると効果的ですか? 実際のテストは以下で実行されます
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')
結論:
その理由は次のように理解できます: 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 サイトの他の関連記事を参照してください。