MySQL 文字列連結関数 GROUP_CONCAT の詳細な説明

MySQL 文字列連結関数 GROUP_CONCAT の詳細な説明

前回の記事では、クロステーブル更新について書きました。自分が書いた SQL を見たとき、自分がバカみたいに感じて、クロステーブル更新について書きました。あっという間に1年が経ち、記事の後半で加わった2人の従業員馮大馮二も、厳しいKPI評価に直面しました。彼らはそれぞれパフォーマンススコア4と5を獲得し、良い仕事をしました。

新たな要求が静かにやって来ます! ! ! リーダーは、各パフォーマンスの対象者が誰であるかを確認したいと考えており、同時に、これらの人の名前をコンマで区切った文字列に連結して、次の結果を得ることを要求しています。

結果セット内の指定された列の文字列を連結するにはどうすればよいですか?主人公が光り輝く✨

GROUP_CONCAT(式)

公式の MySQL ドキュメントでは、この関数は集計関数のセクションに配置されています。指定したフィールドでグループ化して連結する場合は、キーワードGROUP BYとともに使用する必要があります。

意味

この関数は非NULL值をグループ化して連結した文字列結果を返します。 NULL 以外の値がない場合、NULL を返します。完全な構文は次のとおりです。
GROUP_CONCAT([DISTINCT] 式 [,式 ...]
       [ORDER BY {unsigned_integer | col_name | expr}
         [ASC | DESC] [,列名 ...]]
       [セパレーター str_val])

何ですか?この構文は複雑すぎます。心配しないでください。例を使って一つずつ説明し、検証していきます。

ユースケース

まず、記事の冒頭にある要件を完了してください。

SELECT パフォーマンス、GROUP_CONCAT(従業員名) AS 従業員
従業員から
GROUP BY パフォーマンス;

結果はZouです:

この時点で、リーダーから与えられた要件は完了しました😜

お客様、そのままお待ちください。ご注文いただいた料理はまだ出ておりません。

私たちは国際的なチームであり、私たちの故郷は世界中にあります

リーダーは従業員のことを気にかけたいと考えており、会社内のすべての従業員の出身地を確認したいと考えています。従業員は同じ場所から来る可能性があるので、結果セットから重複を削除するには、 DISTINCTキーワードが便利です。

GROUP_CONCAT(DISTINCT home_town) を選択
従業員から;

結果を見てみましょう:

リーダーの気遣いはどこにでもあります...

コピーライティングを変える必要があります。リーダーの気遣いは四海五湖あるので、 ORDER BYキーワードが役立ちます。

SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC) AS 'リーダーシップケアエリア'
従業員から;

-- 私のように変数を使う人は誰もいませんし、中国語です。あなたは頭がおかしいと思います。 

ここで、 GROUP_CONCAT関数のデフォルトの区切り文字がカンマであることがわかります,上司は不満で、カンマは良い表現ではありません。強い配慮を示すには、❕ を使用する必要があります。SEPARATOR SEPARATORが役立ちます。

グループ化された値間のデフォルトの区切り文字はカンマ (,) です。区切り文字を明示的に指定するには、 SEPARATORキーワードの後に​​、設定する区切り文字を指定します。区切り文字を完全に削除するには、 SEPARATORキーワードの後に​​ '' と記述します。
SELECT GROUP_CONCAT(DISTINCT home_town ORDER BY home_town DESC SEPARATOR '!') AS 'リーダーシップケア地域'
従業員から;

SELECT GROUP_CONCAT(DISTINCT home_town SEPARATOR '') AS 'リーダーシップ ケア エリア'
従業員から;

これはかなり思いやりのあることですよね?よく考えてみてください! ! !

リーダーのケア能力にも制限があります。連結された文字列のデフォルトの最大長は 1024 文字です。現在の制限は、次のステートメントで確認できます。

'group_concat_max_len' のような変数を表示します。

リーダーの能力は変動しやすいため、この値は柔軟に設定できます。

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

セッション: 現在のセッションで有効 グローバル: グローバルに有効

このステートメントが実行されると、MySQL が再起動されるまで有効になります。MySQL が再起動されると、デフォルト値が復元されます。

場合によっては、 GROUP_CONCAT() CONCAT_WS()と組み合わせて使用​​して、さらにパワーを引き出す必要があります。以下に簡単な例を示します。

消費者の名と姓をコンマで区切り、さらに ; で区切ります;
選択
  GROUP_CONCAT(
    CONCAT_WS(', ', 連絡先の姓、連絡先の名)
    セパレータ ';')
から
  顧客;

CONCAT_WS() 関数の使い方は次のとおりです。非常に簡単なので、ぜひご自身で確認してください...

注意⚠️

GROUP_CONCAT() 関数は、値のリストではなく、単一の文字列を返します。つまり、GROUP_CONCAT() 関数の結果を IN 演算子、たとえば次のようにサブクエリで使用することはできません。

選択
  ID、名前
から
  テーブル名
どこ
  GROUP_CONCAT(id)内のid;

要約する

多くの場合、GROUP_CONCAT() 関数を使用して有用な結果を生成できます。また、他の関数と組み合わせてさらに強力な機能を実現することもできます。

以下もご興味があるかもしれません:
  • Mysqlのマージ結果と水平スプライシングフィールドの実装手順
  • Mysqlはフィールドスプライシングのための3つの関数を実装している
  • MySQL で複数のフィールドを連結する詳細な例

<<:  Vue3+TypeScriptは再帰メニューコンポーネントの完全な例を実装します

>>:  Ubuntu 20.04 と NVIDIA ドライバーのインストールに関するチュートリアル

推薦する

Tomcat のプレースホルダーによるポート設定方法 (パラメータ指定方式)

仕事で必要になったため、インターネットで多くの情報を見つけましたが、それらはすべてコピーアンドペース...

Vue3でelement-plusを使用する方法の詳細な説明

目次1. インストール2. main.jsにインポートする3. 使用Vue3がリリースされてからしば...

ファイルをアップロードするときに enctype フィールドを使用する理由は何ですか?

FORM 要素の enctype 属性は、フォーム データがサーバーに送信されるときに使用されるエン...

指定したディレクトリに nginx をインストールする方法の例

会社の要件により、異なる場所にある 2 つの nginx サーバーを同じマシンにインストールする必要...

CSSブロッキングマージとその他の効果についての簡単な説明

非直交マージンマージンを使用するとマージが発生します次のプロパティはマージンの結合を防止します。国境...

DockerはGitを使用してJenkinsのリリースとテストプロジェクトの詳細なプロセスを実装します

目次1. Dockerをインストールする2. カスタムネットワークアドレスを作成する3. Docke...

Reactイベントスロットリング効果が失敗する理由と解決策

目次ここでの問題は次の通りです:解決策1:解決策2: コンストラクタで初期化を割り当てる採掘場の概要...

Vue2.0の双方向データバインディング原則を手動で実装する

一言で言えば: データハイジャック (Object.defineProperty) + パブリッシュ...

Vue で Axios 非同期リクエスト API を使用する方法

目次基本的なHTTPリクエストの設定async/await を使用した Axios Axios によ...

MySql の知識ポイント: トランザクション、インデックス、ロックの原則、使用状況の分析

この記事では、トランザクション、インデックス、ロックなどの MySQL の知識ポイントの原理と使用法...

Dockerの国内イメージソースを変更する方法

Dockerデーモンのアクセラレータを構成する設定ファイルから Docker を起動し、/etc/d...

Javascript Bootstrapのグリッドシステム、ナビゲーションバー、カルーセルの詳細な説明

目次ブートストラップと関連コンテンツの紹介グリッドシステムネストされた列列オフセット列の並べ替えナビ...

ウェブページが自動的にデュアルコアブラウザの高速モードを呼び出すようにします(Webkit)

コードサンプルヘッドタグにコード行を追加します: XML/HTML コードコンテンツをクリップボード...

ReactRouterの実装

ReactRouterの実装ReactRouterはReactのコアコンポーネントです。主にReac...

MySQL データベースに基づくデータ制約の例と 5 つの整合性制約の紹介

非準拠データがデータベースに入るのを防ぐために、ユーザーがデータを挿入、変更、削除、その他の操作を行...