MySQL の列から行への変換、フィールドの結合方法 (必読)

MySQL の列から行への変換、フィールドの結合方法 (必読)

データシート:

列から行へ: max(case when then) を使用

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

(もちろん「中国語」の場合はスコア、それ以外は0で終了) ---判定

言語として---列名としてエイリアス

選択
 `名前`、
 最大(
  場合 
  コース = '中国語' の場合
   スコア
  終わり
 ) AS言語、
 最大(
  場合 
  コース = '数学' の場合
   スコア
  終わり
 ) AS数学、 
 最大(
  場合 
  コース = '英語' の場合
   スコア
  終わり
 ) 英語から
 学生
GROUP BY `名前`
; 

マージフィールドの表示: group_cancat(course,":","score") を使用します

選択
 `名前`、
 GROUP_CONCAT(コース, ":", スコア) AS スコア FROM
 学生
グループ化
 `名前`; 

group_concat() について、マニュアルには次のように記載されています: この関数は、グループ接続から NULL 以外の値を含む文字列結果を返します。
比較的抽象的で理解しにくいです。

簡単に言えば、group_concat() はどの行が同じグループに属しているかを計算し、同じグループに属する列を表示します。どの列を返すかは関数によって決まります

パラメータの数(つまり、フィールド名)によって決まります。グループ化には基準が必要です。つまり、group by で指定した列に従ってグループ化する必要があります。

私の推測では、group_concat 関数は内部で group by ステートメントを実行するはずです。

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

選択
 GROUP_CONCAT(`名前`)
から
 学生
グループ化
 `名前`;

結果は、name 内のどの値が同じであるかを見つけることです。等しい場合は、次のように、すべてをカンマで区切ってリストします。

group_concat('名前')

2. テスト:

選択
 GROUP_CONCAT(`名前`)
から
 学生
;

結果:

group_concat('名前')

group_concatはgroup byステートメントと一緒に使用した場合にのみ有効であることを証明できますか?以下は実際のテストです。

3. group_concat() の設定に対する定数の効果をテストします。

@@GROUP_CONCAT_MAX_LEN=4 を設定します

マニュアルには、設定の構文は次の通りであると記載されています。

[セッション | グローバル] group_concat_max_len = val を設定します。

この2つの違いは何でしょうか?

@@global.GROUP_CONCAT_MAX_LEN=4 を設定します。
global は省略できます。その場合は、次のようになります: SET @@GROUP_CONCAT_MAX_LEN=4;

4. ステートメントを使用する

選択
GROUP_CONCAT(`名前`)
から
学生;

結果は次のとおりです。

group_concat('名前')

結論:目的の効果を得るには、group_concat() 関数を group by ステートメントと一緒に使用する必要があります。

理由は次のように理解できます: group_concat() はグループ x に属するすべてのメンバーを取得します (関数内の列パラメータは、表示する必要があるフィールドを指定します)。グループxはどこから来たのでしょうか?

group by が指定されていない場合、group_concat() がメンバーを表示するためにどのグループを使用するかは不明です。 したがって、上記に group by 句がない場合、Liu Bei、Guan Yu、Zhang Fei、Liu Bei、Guan Yu、Zhang Fei、Liu Bei、Guan Yu、Zhang Fei が表示されます。

この機能は実際にいつ必要になるのでしょうか?

クエリ結果が次のようになっているとします。左側にグループ名が表示され、右側にグループ下のすべてのメンバー情報が表示されます。この機能を使用すると、多くのトラブルを回避できます。

また、以下を使用する場合:

選択
 `名前`、
 GROUP_CONCAT(コース, ":", スコア) AS スコア FROM
 学生
;

あまり意味がありません。

group_concat() の場合、単一の列を指定するのが最善の方法です。複数の列が指定されている場合。

選択
 `名前`、
 GROUP_CONCAT(コース, ":", スコア) AS スコア FROM
 学生
グループ化
 `名前`;

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

group_concat(コース,":",スコア)

MySQL で列を行に変換し、フィールドをマージする方法についての上記の記事 (必読) が、私が皆さんと共有したいことのすべてです。この記事が皆さんの参考になれば幸いです。また、123WORDPRESS.COM をサポートしていただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL で単一のフィールド内の複数の値を分割および結合する方法
  • Mysqlのマージ結果と水平スプライシングフィールドの実装手順
  • MySQL ユニオン マージ クエリ データとテーブル エイリアスおよびフィールド エイリアスの使用状況の分析
  • グループ文字マージSQL文は、特定のフィールドで文字列の1つをマージします(単純マージ)
  • SQL Server でフィールド値をマージする例
  • MySQLで2つのフィールドをマージする方法
  • フィールドを結合するSQL関数

<<:  Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

>>:  Linux サーバーのクイックアンインストールとノード環境のインストール (簡単に始められます)

推薦する

Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介

目次リアクティブ機能使用法: toRef 関数 (理解するだけ)使用法: ref関数レスポンシブデー...

JavaScriptは文字の出現回数をカウントします

この記事の例では、文字の出現回数をカウントするJavaScriptの具体的なコードを参考までに共有し...

MySQL 5.7.18 のインストールと設定方法のグラフィックチュートリアル (CentOS7)

LinuxにMySQL 5.7.18をインストールする方法1. MySQLをダウンロードします。公...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

MySQL で UTF-8 エンコーディングを使用しないのはなぜですか?

MySQL UTF-8 エンコーディングMySQL は 2003 年のバージョン 4.1 から U...

Vueリクエストインターセプターの設定方法の詳しい説明

以下の手順に従ってください1. request.jsコンテンツ: http リクエスト インターセプ...

Clickhouse Docker クラスターの展開と構成を例を使って説明します

目次前面に書かれた環境の展開Zookeeper クラスタの展開Clickhouse クラスターの展開...

Vueはズームイン、ズームアウト、ドラッグ機能を実装しています

この記事では、参考までに、ズームインとズームアウトのドラッグ機能を実現するためのVueの具体的なコー...

docker compose helloworld を使い始めるための詳細なプロセス

前提条件Compose は、Docker コンテナをオーケストレーションするためのツールです。Doc...

Linux CentOS 6.5 ifconfig が IP を照会できない問題の解決方法

最近、何人かの友人から、仮想マシンに CentOS をインストールした後、ifconfig コマンド...

MySQL の厄介な Aborted 警告をケーススタディで分析する

この記事では主に、MySQL の Aborted アラームに関する関連コンテンツを紹介し、参考と学習...

VSCode の JS フォーマットでセミコロンを自動的に追加または削除する方法について

導入js コード文の末尾にセミコロンを追加しても追加しなくても問題ありません。一般的に、チームで開発...

MySQLに絵文字表現を挿入する方法

序文今日、オープンソース プロジェクトのフィードバック フォームを設計していたところ、絵文字表現を挿...

Linuxのdateコマンドの使用

1. コマンドの紹介date コマンドは、現在の時刻または指定された時刻を指定された形式で表示するた...

Centos7でmysql6の初期化インストールパスワードをインストールする方法

1. まずデータベースサーバーを停止しますサービスmysqld停止2.vim /etc/my.cnf...