如何用SQL合并不同行字段并求和对应计数?
合并Name字段并求和Number(count)的SQL实现方法
需求说明
需要将数据表中指定行的Name字段合并为paul/john格式,同时将对应的Number(count)值求和。现有数据表:
| Name | Number(count) |
|---|---|
| Paul | 50 |
| John | 50 |
期望结果:
| Name | Number(count) |
|---|---|
| paul/john | 100 |
解决方案
1. 针对固定合并Paul和John的场景
如果只需要合并这两个特定名字,可以直接指定拼接规则并过滤求和:
SELECT CONCAT(LOWER('Paul'), '/', LOWER('John')) AS Name, SUM(`Number(count)`) AS `Number(count)` FROM your_table WHERE Name IN ('Paul', 'John');
2. 通用合并所有行的场景
如果需要合并表中所有行的Name并求和,不同数据库的字符串聚合语法略有差异:
- MySQL/MariaDB:使用
GROUP_CONCAT函数
SELECT GROUP_CONCAT(LOWER(Name) SEPARATOR '/') AS Name, SUM(`Number(count)`) AS `Number(count)` FROM your_table;
- PostgreSQL:使用
STRING_AGG函数
SELECT STRING_AGG(LOWER(Name), '/') AS Name, SUM("Number(count)") AS "Number(count)" FROM your_table;
- SQL Server:使用
STUFF结合FOR XML PATH实现字符串拼接
SELECT STUFF((SELECT '/' + LOWER(Name) FROM your_table FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') AS Name, SUM([Number(count)]) AS [Number(count)] FROM your_table;
说明
LOWER()函数用于将Name转为小写,与期望结果的paul/john格式匹配,若不需要小写可直接移除该函数。- 由于字段名包含括号和空格,需要根据数据库规则用反引号(MySQL)、双引号(PostgreSQL)或方括号(SQL Server)包裹字段名。
内容的提问来源于stack exchange,提问作者user21051730
相关产品推荐
相关产品推荐

