首页 > 数据库 > 数据库开发技术 > SQL 聚合函数之字符串分组合并
示例数据: https://gitcode.net/horses/thinking_in_sql
SELECT dept_id, LISTAGG(emp_name, ';')
FROM employee
GROUP BY dept_id;
DEPT_ID|LISTAGG(EMP_NAME,';') |
-------|-----------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;黄忠;魏延 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;关平;赵氏;关兴;张苞;赵统;周仓;马岱|
5|法正;庞统;蒋琬;黄权;糜竺;邓芝;简雍;孙乾 |
SELECT dept_id, LISTAGG(emp_name, ';') WITHIN GROUP (ORDER BY hire_date, salary DESC)
FROM employee
GROUP BY dept_id;
DEPT_ID|LISTAGG(EMP_NAME,';')WITHINGROUP(ORDERBYHIRE_DATE,SALARYDESC)|
-------|-------------------------------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;魏延;黄忠 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;周仓;关平;关兴;赵氏;赵统;张苞;马岱 |
5|法正;庞统;蒋琬;黄权;糜竺;孙乾;邓芝;简雍 |
LISTAGG( [ ALL ] [ DISTINCT ] measure_expr [, 'delimiter'] [listagg_overflow_clause] )
[ WITHIN GROUP ] (order_by_clause) [OVER query_partition_clause]
listagg_overflow_clause::=
{ ON OVERFLOW ERROR }
|
{ ON OVERFLOW TRUNCATE [ 'truncation-indicator' ] [ { WITH | WITHOUT } COUNT ] }
SELECT dept_id, GROUP_CONCAT(emp_name SEPARATOR ';')
FROM employee
GROUP BY dept_id;
dept_id|GROUP_CONCAT(emp_name SEPARATOR ';') |
-------|-----------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;黄忠;魏延 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;关平;赵氏;关兴;张苞;赵统;周仓;马岱|
5|法正;庞统;蒋琬;黄权;糜竺;邓芝;简雍;孙乾 |
SELECT dept_id, GROUP_CONCAT(emp_name ORDER BY hire_date, salary DESC SEPARATOR ';')
FROM employee
GROUP BY dept_id;
dept_id|GROUP_CONCAT(emp_name ORDER BY hire_date, salary DESC SEPARATOR ';')|
-------|--------------------------------------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;魏延;黄忠 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;周仓;关平;关兴;赵氏;赵统;张苞;马岱 |
5|法正;庞统;蒋琬;黄权;糜竺;孙乾;邓芝;简雍 |
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]]
[SEPARATOR str_val])
SELECT dept_id, STRING_AGG(emp_name, ';')
FROM employee
GROUP BY dept_id;
dept_id| |
-------|-----------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;黄忠;魏延 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;关平;赵氏;关兴;张苞;赵统;周仓;马岱|
5|法正;庞统;蒋琬;黄权;糜竺;邓芝;简雍;孙乾 |
SELECT dept_id, STRING_AGG(emp_name, ';') WITHIN GROUP (ORDER BY hire_date, salary DESC)
FROM employee
GROUP BY dept_id;
dept_id| |
-------|-----------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;魏延;黄忠 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;周仓;关平;关兴;赵氏;赵统;张苞;马岱|
5|法正;庞统;蒋琬;黄权;糜竺;孙乾;邓芝;简雍 |
STRING_AGG ( expression, separator ) [ <order_clause> ]
<order_clause> ::=
WITHIN GROUP ( ORDER BY <order_by_expression_list> [ ASC | DESC ] )
SELECT dept_id, STRING_AGG(emp_name, ';')
FROM employee
GROUP BY dept_id;
dept_id|string_agg |
-------|-----------------------------------------|
4|赵云;廖化;关平;赵氏;关兴;张苞;赵统;周仓;马岱|
2|诸葛亮;黄忠;魏延 |
3|孙尚香;孙丫鬟 |
1|刘备;关羽;张飞 |
5|法正;庞统;蒋琬;黄权;糜竺;邓芝;简雍;孙乾 |
SELECT dept_id, STRING_AGG(emp_name, ';' ORDER BY hire_date, salary DESC)
FROM employee
GROUP BY dept_id;
dept_id|string_agg |
-------|-----------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;魏延;黄忠 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;周仓;关平;关兴;赵氏;赵统;张苞;马岱|
5|法正;庞统;蒋琬;黄权;糜竺;孙乾;邓芝;简雍 |
STRING_AGG ( [ALL|DISTINCT] expression, separator [ORDER BY …]) [ FILTER ( WHERE filter_clause ) ]
SELECT dept_id, GROUP_CONCAT(emp_name, ';')
FROM employee
GROUP BY dept_id;
dept_id|GROUP_CONCAT(emp_name, ';') |
-------|------------------------------------------|
1|刘备;关羽;张飞 |
2|诸葛亮;黄忠;魏延 |
3|孙尚香;孙丫鬟 |
4|赵云;廖化;关平;赵氏;关兴;张苞;赵统;周仓;马岱 |
5|法正;庞统;蒋琬;黄权;糜竺;邓芝;简雍;孙乾 |
原文作者:SQL编程思想;如有侵权,请联系管理员删除。