报表下钻踩坑:GROUP_CONCAT 长度限制导致数据丢失,改用 JSON_ARRAYAGG
目录一、问题出现二、原因分析三、为什么下钻场景特别容易发现四、解决方案原方案修改方案五、为什么 JSON_ARRAYAGG 更适合下钻六、修改后的 SQL七、注意事项八、总结背景在开发财务报表、欠费分析等统计类功能时经常会有这样的需求汇总页面展示统计数据点击某一行后下钻查看该分类下所有明细数据。例如欠费账龄分析项目A 欠费资源数5000个 欠费金额100000元用户点击项目A需要进入明细页面资源1 资源2 资源3 ... 资源5000实现方式通常是在汇总 SQL 中提前聚合资源 IDGROUP_CONCAT(DISTINCTtmp.fld_object_guid)ASfldObjectGuidsStr然后下钻时wherefld_object_guidin(...)根据这些 ID 查询明细。一、问题出现测试数据量较小时GROUP_CONCAT(DISTINCTfld_object_guid)返回正常10001,10002,10003,10004下钻查询select*fromes_charge_owner_feewherefld_object_guidin(10001,10002,10003,10004)结果正常。但是生产环境某些项目资源量较大例如一个区域 20000个资源执行GROUP_CONCAT(DISTINCTfld_object_guid)发现汇总数量资源数20000但是下钻明细只有几千条二、原因分析查看 SQLGROUP_CONCAT(DISTINCTtmp.fld_object_guid)发现问题。MySQL 对GROUP_CONCAT有长度限制group_concat_max_len默认1024查看SHOWVARIABLESLIKEgroup_concat_max_len;当聚合结果超过限制MySQL 不会报错。而是直接截断后面的内容。例如实际应该1001,1002,1003,1004,1005......9999但是因为超过长度实际返回1001,1002,1003,1004......1200后面的资源 ID 全部丢失。三、为什么下钻场景特别容易发现普通列表可能只是展示资源数量20000用户感觉正常。但是下钻依赖汇总数据 ↓ 资源ID集合 ↓ 明细查询一旦 ID 集合被截断会出现汇总数量 ≠ 下钻数量例如项目汇总资源数下钻资源数项目A200001024业务人员会认为报表数据不准确。实际上统计 SQL 没问题。问题出在资源 ID 聚合阶段。四、解决方案原方案GROUP_CONCAT(DISTINCTtmp.fld_object_guid)ASfldObjectGuidsStr返回10001,10002,10003本质字符串。修改方案使用JSON_ARRAYAGG()修改JSON_ARRAYAGG(tmp.fld_object_guid)ASfldObjectGuidsStr返回[10001,10002,10003]由数据库直接返回数组结构。五、为什么 JSON_ARRAYAGG 更适合下钻下钻本质需要传递一批资源ID它不是文本。它是集合。以前10001,10002,10003实际上是假装数组。现在[10001,10002,10003]数据结构更加匹配。六、修改后的 SQL原SELECTtmp.fld_area_guid,COUNT(DISTINCTtmp.fld_object_guid)ASfldResourceCount,GROUP_CONCAT(DISTINCTtmp.fld_object_guid)ASfldObjectGuidsStrFROMtmpGROUPBYtmp.fld_area_guid;修改SELECTtmp.fld_area_guid,COUNT(DISTINCTtmp.fld_object_guid)ASfldResourceCount,JSON_ARRAYAGG(tmp.fld_object_guid)ASfldObjectGuidsStrFROMtmpGROUPBYtmp.fld_area_guid;七、注意事项如果之前GROUP_CONCAT(DISTINCTid)需要去重。而JSON_ARRAYAGG()本身不支持JSON_ARRAYAGG(DISTINCTid)需要提前去重SELECTfld_area_guid,JSON_ARRAYAGG(fld_object_guid)FROM(SELECTDISTINCTfld_area_guid,fld_object_guidFROMtmp)tGROUPBYfld_area_guid;八、总结这次问题本质不是 SQL 统计错误。而是使用 GROUP_CONCAT 保存大量 ID 集合在下钻场景中触发长度限制导致 ID 被截断。对于报表汇总数据下钻大批量资源查询ID 集合传递不要使用GROUP_CONCAT()建议使用JSON_ARRAYAGG()让数据库返回真正的集合结构避免因为字符串长度限制导致隐藏的数据丢失问题。一句话总结GROUP_CONCAT 适合展示拼接文本不适合承载下钻所需的大规模 ID 集合报表下钻场景应优先考虑 JSON_ARRAYAGG避免因 group_concat_max_len 限制造成明细数据缺失。

相关新闻

springboot作业管理系统38347-计算机课程设计/毕业设计

springboot作业管理系统38347-计算机课程设计/毕业设计

前言 📌博主介绍:一线全栈工程师,毕设实战引路人。技术栈覆盖Java、Python、C#、PHP、Node.js及UniApp跨端开发,擅长多语言项目落地与架构设计。持续分享毕设源码、开题报告、技术选型心得与职场踩坑经验。用工程化思维写代码&am…

2026/7/23 21:16:53 阅读更多 →
【单片机毕业设计推荐】基于 STM32 的智能定时提醒药盒设计与实现,基于 STM32 的红外感应智能服药提醒装置开发(012903)

【单片机毕业设计推荐】基于 STM32 的智能定时提醒药盒设计与实现,基于 STM32 的红外感应智能服药提醒装置开发(012903)

文章目录20 个相关毕业设计备选题目项目研究背景摘要总体方案核心功能技术路线项目演示关于我们项目案例源码获取博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金…

2026/7/23 21:16:53 阅读更多 →
es6相关知识(创作中。。。)

es6相关知识(创作中。。。)

1.let、var、constvar 存在变量提升,只提升声明,不提升赋值;变量提升:var 有变量提升;let/const 同样提升,但存在暂时性死区,声明前无法访问;作用域:var 仅函数 / 全局作…

2026/7/23 21:16:53 阅读更多 →

最新新闻

康谋业务全景速览|自动驾驶仿真、数据闭环、机器人与院校实训一站式方案

康谋业务全景速览|自动驾驶仿真、数据闭环、机器人与院校实训一站式方案

康谋(Keymotek)是由虹科(国家级专精特新小巨人、高新技术企业)孵化的,专注于智能驾驶和具身智能领域的业务主体。凭借团队数十年汽车软硬件开发经验,目前主要为智驾及具身智能研发测试的整个流程提供数据闭…

2026/7/23 21:25:56 阅读更多 →
文字转语音,原来如此简单!

文字转语音,原来如此简单!

输入文字即可一键生成配音,多种音色可选。

2026/7/23 21:25:56 阅读更多 →
深入解析TMS320C5x DSP架构:哈佛结构、外设协同与低功耗设计实战

深入解析TMS320C5x DSP架构:哈佛结构、外设协同与低功耗设计实战

1. 项目概述:为什么我们需要深入理解TMS320C5x的架构? 如果你在嵌入式信号处理领域摸爬滚打超过十年,那么对TI的TMS320系列DSP一定不会陌生。这个系列就像是信号处理领域的“活化石”,见证了从专用硬件到高度集成SoC的整个演变历程…

2026/7/23 21:25:56 阅读更多 →
国家级制造业单项冠军申报核心要素及实操要点

国家级制造业单项冠军申报核心要素及实操要点

一、申报成功的核心要素主要有以下四点国家级制造业单项冠军认定核心逻辑为“专、精、特、新”极致呈现,聚焦细分赛道小而美、全球顶尖企业。关键行动与决策要点如下:(一)长期精准聚焦,拥有绝对领先市场地位&#xff1…

2026/7/23 21:25:56 阅读更多 →
b站铁头山羊Freertos入门篇学习3

b站铁头山羊Freertos入门篇学习3

上节我们说到freertos的代码规范接着我们继续看框图这是freertos的5种堆内存管理方式,配置的时候选一种即可问题来了?frtos为什么不使用c语言的内存管理方式呢?c语言有两个关于堆内存的函数分别是:开辟malloc,释放free,不具有可重入性就是:一个函数被重…

2026/7/23 21:25:56 阅读更多 →
Kimi长回答批量导出Word:DS随心转实践

Kimi长回答批量导出Word:DS随心转实践

一句话答案:Kimi 长回答和多轮对话适合先按主题批量导出 Markdown 备份,再整理成 Word、PDF、Excel 或图片。DS随心转可以批量选择当前页面已加载的多轮消息,将当前账号有权访问的内容整理成常用文档格式,其中 Markdown 导出免费。…

2026/7/23 21:24:56 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻