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

SQL如何筛选符合条件客户并将账户行聚合为指定格式字符串

正确实现SQL(PostgreSQL环境)

SELECT 
    c.client_id,
    c.surname,
    string_agg(
        CONCAT(a.acc_id, ' (', a.currency_type, '): ', a.available_amount),
        '; ' 
        ORDER BY a.acc_id
    ) AS accounts
FROM 
    clients c
INNER JOIN 
    accounts a ON c.client_id = a.client_id
WHERE 
    c.client_id IN (
        SELECT client_id
        FROM accounts
        GROUP BY client_id
        HAVING COUNT(acc_id) > 1 AND BOOL_OR(available_amount < 0)
    )
GROUP BY 
    c.client_id, c.surname
ORDER BY 
    c.client_id;

实现说明

  1. 子查询部分完成合格客户筛选:按client_id分组后,COUNT(acc_id) > 1保证客户名下账户数大于1,BOOL_OR(available_amount < 0)保证至少有一个账户余额为负,两个条件同时满足的客户ID会被筛选出来。
  2. 外层查询关联clients和accounts表,使用CONCAT函数按要求格式拼接单个账户的信息,再通过string_agg函数将同一客户的所有账户拼接结果用; 连接,ORDER BY a.acc_id保证账户展示顺序和示例一致。
  3. 最终按client_id和surname分组,输出要求的三列结果,和给出的示例输出完全匹配。

如果是MySQL环境,只需要将string_agg替换为GROUP_CONCAT即可,对应聚合部分写法为:

GROUP_CONCAT(
    CONCAT(a.acc_id, ' (', a.currency_type, '): ', a.available_amount)
    ORDER BY a.acc_id
    SEPARATOR '; '
) AS accounts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:06:03