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

Postgres10 Mutation表多字段过滤,新建用户仅展示合并姓名结果

解决方案

核心思路:把变更记录拆分为「Persons表创建操作」和「其他所有变更」两类分别处理再合并,对原有查询逻辑的侵入性最低。

实现步骤

  1. 把你现有复杂度较高的查询封装为公共CTE(公共表表达式),避免重复编写原有逻辑
  2. 过滤出非Persons表创建操作的所有记录,原样保留输出
  3. 单独聚合处理Persons表的创建操作,合并姓名字段生成单行记录,过滤其余40余个多余属性
  4. 用UNION ALL合并两部分结果后按需求排序即可

示例代码

WITH original_query AS (
    -- 此处粘贴你现有的复杂查询语句,输出字段需包含样例中的所有列:userid、table1、did、execution_date、change_type、attr、value_old、value_new
)
-- 第一部分:非Persons表创建操作的所有记录,原样输出
SELECT userid, table1, did, execution_date, change_type, attr, value_old, value_new
FROM original_query
WHERE NOT (table1 = 'Persons' AND change_type = 'Create')

UNION ALL

-- 第二部分:单独处理Persons表创建操作,拼接姓名仅保留一行
SELECT 
    userid,
    table1,
    did,
    execution_date,
    change_type,
    'Name' AS attr,
    NULL AS value_old,
    -- 请按实际表中的姓名字段名调整CASE判断的attr取值
    MAX(CASE WHEN attr = 'first_name' THEN value_new END) || ' ' || MAX(CASE WHEN attr = 'last_name' THEN value_new END) AS value_new
FROM original_query
WHERE table1 = 'Persons' AND change_type = 'Create'
-- 按单次创建操作的公共字段分组,确保每个用户的创建记录仅生成一行
GROUP BY userid, table1, did, execution_date, change_type

-- 最终统一排序,可根据实际需求调整排序规则
ORDER BY userid;

注意事项

  • 完全兼容PostgreSQL 10版本,不需要依赖高版本语法或额外扩展
  • 如果你的表中姓名字段不是first_name、last_name,自行调整CASE语句里的attr取值即可
  • 分组字段可根据业务实际调整,通常did是单次操作的唯一标识,以此为核心分组即可保证聚合准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:06:03