如何通过SQL查询同时获取分组统计结果与原始明细行
解决方案
可以通过UNION ALL合并分组统计结果与原始数据,配合排序字段实现统计行前置的效果,单条SQL语句即可完成:
假设你的表名为your_table,执行以下查询:
SELECT Partno, Total FROM ( -- 生成分组统计行 SELECT Partno, SUM(Total) AS Total, 1 AS sort_key FROM your_table GROUP BY Partno UNION ALL -- 保留原始数据行 SELECT Partno, Total, 2 AS sort_key FROM your_table ) combined_data ORDER BY Partno, sort_key, Total;
逻辑说明:
- 子查询通过
UNION ALL拼接两部分数据:- 第一部分按
Partno分组求和,得到每组的统计行 - 第二部分直接取原始表的所有行
- 第一部分按
- 新增
sort_key字段:统计行设为1,原始行设为2,确保排序时统计行排在同组原始行的最前面 - 最终排序规则:先按
Partno分组,再按sort_key控制顺序,最后按Total匹配示例中的原始行排序
关于斜体展示:
SQL仅负责返回数据,斜体属于前端展示逻辑。可以在查询中新增标识字段区分行类型,方便前端处理:
SELECT Partno, Total, row_type FROM ( SELECT Partno, SUM(Total) AS Total, 1 AS sort_key, 'summary' AS row_type FROM your_table GROUP BY Partno UNION ALL SELECT Partno, Total, 2 AS sort_key, 'detail' AS row_type FROM your_table ) combined_data ORDER BY Partno, sort_key, Total;
前端拿到结果后,对row_type为summary的行,将Partno和Total设置为斜体样式即可。
内容的提问来源于stack exchange,提问作者Ferdy Keler
相关产品推荐
相关产品推荐

