You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中结合GROUP BY将名和姓合并为全名

SQL中结合GROUP BY拼接姓名并汇总金额的解决方案

针对你需要从tbl_customers和tbl_payment表中,按customerNumber分组汇总总金额,同时拼接firstName和lastName为fullName的需求,以下是不同数据库环境下的具体实现方案:

核心思路

通过关联客户表与支付表,按客户编号分组,使用对应数据库的字符串拼接函数生成全名,再用SUM()聚合函数计算总支付金额。

1. MySQL/MariaDB 实现

使用CONCAT()函数拼接字符串,GROUP BY需包含所有非聚合字段(或依赖主键唯一性简化分组):

SELECT 
    c.customerNumber,
    CONCAT(c.firstName, ' ', c.lastName) AS fullName,
    SUM(p.amount) AS totalAmount
FROM tbl_customers c
JOIN tbl_payment p ON c.customerNumber = p.customerNumber
GROUP BY c.customerNumber, c.firstName, c.lastName;

2. PostgreSQL 实现

支持||拼接符或CONCAT()函数,两种方式均可:

SELECT 
    c.customerNumber,
    c.firstName || ' ' || c.lastName AS fullName,
    -- 等价写法:CONCAT(c.firstName, ' ', c.lastName) AS fullName
    SUM(p.amount) AS totalAmount
FROM tbl_customers c
JOIN tbl_payment p ON c.customerNumber = p.customerNumber
GROUP BY c.customerNumber, c.firstName, c.lastName;

3. SQL Server 实现

推荐使用CONCAT()函数(自动处理NULL值),也可使用+拼接符(需注意NULL会导致结果为NULL):

SELECT 
    c.customerNumber,
    CONCAT(c.firstName, ' ', c.lastName) AS fullName,
    -- 等价写法(需确保姓名非空):c.firstName + ' ' + c.lastName AS fullName
    SUM(p.amount) AS totalAmount
FROM tbl_customers c
JOIN tbl_payment p ON c.customerNumber = p.customerNumber
GROUP BY c.customerNumber, c.firstName, c.lastName;

4. Oracle 实现

使用||拼接符,或嵌套CONCAT()函数(Oracle原生CONCAT仅支持两个参数):

SELECT 
    c.customerNumber,
    c.firstName || ' ' || c.lastName AS fullName,
    -- 等价写法:CONCAT(CONCAT(c.firstName, ' '), c.lastName) AS fullName
    SUM(p.amount) AS totalAmount
FROM tbl_customers c
JOIN tbl_payment p ON c.customerNumber = p.customerNumber
GROUP BY c.customerNumber, c.firstName, c.lastName;

扩展:包含无支付记录的客户

如果需要显示所有客户(包括无支付记录的),将JOIN改为LEFT JOIN,并用COALESCE()将空金额转为0:

-- 以MySQL为例,其他数据库语法类似
SELECT 
    c.customerNumber,
    CONCAT(c.firstName, ' ', c.lastName) AS fullName,
    COALESCE(SUM(p.amount), 0) AS totalAmount
FROM tbl_customers c
LEFT JOIN tbl_payment p ON c.customerNumber = p.customerNumber
GROUP BY c.customerNumber, c.firstName, c.lastName;

内容的提问来源于stack exchange,提问作者Huy Panha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:45:24