Oracle の wm_concat() と mysql の group_concat() は、同じ列を 1 つの行にマージし、複数の列を 1 つの行に結合します。

1.1 oracle 構文 wmsys.wm_concat():
SELECT
NAME,
wmsys.wm_concat(subject_1) subject_1
FROM
table_name
GROUP BY
NAME
1.2 oracle 構文 LISTAGG() (これは Oracle 11g 以降で提供される構文であることに注意してください):
LISTAGG(measure_expr [, 'delimiter']) WITHIN GROUP (order_by_clause) [OVER query_partition_clause]
パラメータの説明
OVER は、OVER 句を使用して計算のウィンドウを定義します。
measure_expr には任意の式を指定できます。メジャー列の Null 値は無視されます。
delimiter は、メトリック値を区切るために使用される文字列を指定します。この句はオプションであり、デフォルトは NULL です。
SELECT
NAME, listagg(subject_1, ',') inside GROUP (ORDER BY NAME)
FROM table_name
GROUP BY NAME
2.1 Oracle 構文 wmsys.wm_concat():

Oracle の wm_concat() を通じて、複数の列の結合を実現できます。


TK_USER_INFO
グループからNAME、wmsys.wm_concat(age || '|' || address) メッセージを NAME で選択します。

知らせ:

1. 上記の SQL で、|| '|' || は 2 つの列が | で区切られていることを意味し、'|' は任意の区切り文字に置き換えることができます

1.3 mysql语法group_concat:
SELECT
NAME,
GROUP_CONCAT(distinct subject_1 order by subject_1 asc separator ',') subject_1
FROM
table_name
GROUP BY
NAME
2.2 mysql语法CONCAT()

tk_user_info から名前、CONCAT(年齢、住所) メッセージを選択します。

知らせ:

1. CONCAT スプライシングの結果にはセパレータがありません

2. 右側の連結列が null の場合は、null を返します。
2.3 mysql 構文 CONCAT_WS()

select name, CONCAT_WS(',',age ,address) msg​​ from tk_user_info;

知らせ:

1. この関数はセパレータを定義できます。CONCAT_WS() は CONCAT With Separator を表します。

2. 構文は CONCAT_WS(separator,str1,str2,…) で、最初のパラメータはセパレータ、その他は結合された列です。
2.4 mysql 構文 GROUP_CONCAT()

tk_user_info グループから名前、GROUP_CONCAT(年齢、'、'、アドレス) メッセージを名前で選択します。

知らせ:

1. その構文は次のとおりです (複数行のスプライシングに関する上記の説明と同様に、冗長性の排除、ソート、セパレータを実行できます。異なるスプライシング列には異なるセパレータを含めることができます)。

GROUP_CONCAT([DISTINCT] expr [,expr …]
[ORDER BY {unsigned_integer |col_name | Formula} [ASC | DESC] [,col …]]
[SEPARATOR str_val])

2. この SQL は、特定の列をグループ化した後に列を結合するために使用されるため、SQL の後に group by を続ける必要があります。

おすすめ

転載: blog.csdn.net/qq_34690003/article/details/131132528