序文
長い間Mysql に触れていませんでした。
今日の気まぐれで、 Mysql のカラム切り替えについて突然知りたくなり、いくつかの記事を読んだ後、焦点が明確でなかったので、次のとおりです。
Mysql公式サイト、 コミュニティ版ダウンロード( Windows版_mysql.8.0.31ダウンロード )
概要
Mysql は内部的に列変換のための 3 つの関数を提供します。
CONCAT( str1,str2,... )
CONCAT_WS(セパレータ,str1,str2,... )
GROUP_CONCAT( expr )
データの準備
データは以下の通り、シンプルかつ明確です。
#1、查看原始数据
select * from student;
上の図に示すように、問題を説明するには 3 つのデータで十分です。
事例分析
1. CONCAT( str1,str2,... )関数の解析
まず、この関数のパラメータ str1 と str2 を見たときに、この 2 つのパラメータは任意の文字列とみなすべきであると直感しました。
1. concat 関数を使用して文字列を結合します。
select CONCAT('aaa',',','bbb') as info from dual;
効果は図に示されています: concat を使用すると、任意の文字列を結合し、区切り文字をカスタマイズできます。
2. concat 関数を使用して、データの各行を複数の列に配置します--> 1 行 に配置します
select CONCAT(s.id,',',s.name,',',s.age) as infos from student s;
3. 注意事項
テーブル内の単一列のデータを1 つの行に変換したいだけの場合、 concat関数は少し無力に見えるため、以下の3 番目のセクションで紹介するgroup_concat関数を使用する必要があります。
2. CONCAT_WS( separator,str1,str2,... )関数の解析
文法からすると、区切り文字は区切り文字で、その後に str1 と str2 などが続き、結合されたフィールドになります。
この関数が区切り文字を 1 回指定するだけで済むことを理解するのは難しくありません。
select CONCAT_WS('#',id,name,age ) as infos from student ;
注:残念ながら、CONCAT_WS 関数ではまだ単一列の切り替えが許可されていません。
技術業界には専門分野があり、 1件の転職には以下のGROUP_CONCAT関数が必要です!
3. GROUP_CONCAT( expr )関数の分析 (強調)
1. 単一ケースの転送
select GROUP_CONCAT(name) as names from student ;
説明:このケースはこの関数の簡単なデモンストレーションであり、where group by などの条件文を SQL の後に追加することもできます。
2. 拡張
select GROUP_CONCAT('111',name) as names from student ;
select GROUP_CONCAT(name,'222') as names from student ;
select GROUP_CONCAT('111',name,'222') as names from student ;
操作結果:
111succ,111chouniu,111succ
succ222,chouniu222,succ222
111succ222,111chouniu222,111succ222
4. 拡張
Oracle で一般的に使用される列変換
select * from emp;
--方法一:使用concat函数,该函数只能有两个参数(不可以自定义分隔符),但是它允许套用
select concat(empno,ename) from emp;
SELECT CONCAT(CONCAT('A', 'B'),'C')FROM dual;
--可以合并任意多个列为一行
select empno || ',' ||ename from emp;
--单列合并为一行,默认分隔符为逗号,如果想制定分隔符,则需要用replace函数协助
select wm_concat(ename) from emp;
select replace(wm_concat(ename),',','|') from emp;
要約する
ここまで、CONCAT、CONCAT_WS、GROUP_CONCATの 3 つの関数の使用法を基本的にわかりやすく紹介しましたが、実際の開発では、シーンはさらに複雑になります。
良いニュースは、これら 3 つの関数の助けを借りて、後の段階でより複雑な行から列への変換をさらに強力に実現できることです。
エピローグ
MySql のナレッジ ポイントは多すぎます。より重要な MySQL のナレッジ ポイントは後でリリースされます。リリースされていなくても、それらは素晴らしい製品になります。ナンセンスではありません。
役に立ったと思ったら、メッセージ、いいね、ブックマークをお願いします!