如何用Databricks SQL实现两行数据相减生成新行?
Databricks SQL 解决方案
假设你的表名为 program_reports,存储数值的列名为 monthly_value(请根据实际表结构替换这两个名称)。以下查询可以生成你需要的第三行数据,并与原表数据合并:
-- 合并原数据与计算出的Net行 SELECT * FROM program_reports UNION ALL -- 计算每个分组下的Net值 SELECT ProgramId, Category, '3. Net' AS Subcategory, ReportMonth, ReportYear, -- 取分组内第一行数值减去第二行数值 (MAX(CASE WHEN rn = 1 THEN monthly_value END) - MAX(CASE WHEN rn = 2 THEN monthly_value END)) AS monthly_value FROM ( -- 给每个分组内的行按Subcategory排序并编号 SELECT *, ROW_NUMBER() OVER ( PARTITION BY ProgramId, Category, ReportMonth, ReportYear ORDER BY Subcategory ) AS rn FROM program_reports ) ranked -- 只保留有两行数据的分组(确保能计算差值) GROUP BY ProgramId, Category, ReportMonth, ReportYear HAVING COUNT(*) = 2;
关键说明:
PARTITION BY子句确保按ProgramId、Category、ReportMonth、ReportYear分组处理,保证每个分组内的计算独立。ROW_NUMBER()按Subcategory排序给行编号,确保第一行和第二行是你需要做减法的两行(如果你的排序逻辑不是按Subcategory,可以修改ORDER BY后的字段)。HAVING COUNT(*) = 2过滤掉分组内数据行数不等于2的情况,避免出现无效的差值计算。
如果你的数值列名称或表名不同,直接替换对应的标识符即可。
内容的提问来源于stack exchange,提问作者user22876576
相关产品推荐
相关产品推荐

