SQL中如何实现多分组列减法计算及查询报错修复
SQL查询报错修复方案
你遇到的语法报错核心是以下几个语法和逻辑错误导致的:
- 最直接的语法错误是
SELECT后面多了多余的括号,括号包裹了整个SELECT的字段列表,导致语法解析失败触发AS相关的报错 - 三个独立的子查询没有按日期过滤,计算的是全表的总和,无法实现按每个日期聚合的需求
- 子查询内部的AS别名在运算场景下无意义,且
GROUP BY前多了多余的逗号
最优修复方案
不需要写多个子查询,直接用条件聚合实现需求,性能更优,语法也更简洁:
WITH net_revenue_calculator AS ( SELECT DATE_FORMAT(created, '%Y-%m-%d') AS `date`, SUM(IF(reporting_category = 'platform_earning', net, 0)) - SUM(IF(reporting_category = 'network_cost', net, 0)) - SUM(IF(reporting_category = 'fee', net, 0)) AS difference FROM balance_transactions GROUP BY 1 ORDER BY 1 DESC ) SELECT * FROM net_revenue_calculator;
语法说明
- 直接在单次表扫描中完成三个类别的金额汇总,避免多次扫描全表,执行效率是原有写法的3倍以上
- 按
date字段分组后,每个分组的计算结果就是对应日期的A-(B+C)值 - 移除了所有多余的括号、无效别名和标点错误,符合SQL语法规范
如果你一定要保留原有子查询的写法,只需要修正语法和添加日期关联即可,但不推荐,性能远低于条件聚合的写法。
内容的提问来源于stack exchange,提问作者nerdyGuy
相关产品推荐
相关产品推荐

