SQL技术问询:如何按不同ASSG_ID对TOTAL_CUBE字段进行分组求和
问题解决方案
你之前报错大概率是因为使用GROUP BY时,SELECT子句中包含了未聚合、也未加入GROUP BY列表的字段(比如原语句里的dc_id、whse_id、START_DTIM),数据库无法判定多值字段的返回规则,因此抛出错误。根据你的使用场景,可选择以下两种写法:
场景1:仅需输出每个ASSG_ID对应的总立方值
不需要保留原查询的其他维度字段,直接分组聚合即可:
SELECT assg_id, SUM(UNIT_SHIP_CSE * prod_cub) AS TOTAL_CUBE_SUM FROM exehoust.aseld GROUP BY assg_id;
场景2:需要保留原查询的所有行和字段,同时展示对应ASSG_ID的总立方值
使用窗口函数实现,不需要加GROUP BY:
SELECT dc_id, whse_id, assg_id, START_DTIM, UNIT_SHIP_CSE * prod_cub AS TOTAL_CUBE, SUM(UNIT_SHIP_CSE * prod_cub) OVER (PARTITION BY assg_id) AS ASSG_TOTAL_CUBE FROM exehoust.aseld;
带筛选条件的SUM IF写法
如果需要对满足特定条件的记录求和,比如仅统计指定时间区间内的立方值,可按以下写法调整:
SELECT assg_id, SUM(CASE WHEN START_DTIM >= '2024-01-01' THEN UNIT_SHIP_CSE * prod_cub ELSE 0 END) AS FILTERED_TOTAL_CUBE FROM exehoust.aseld GROUP BY assg_id;
内容的提问来源于stack exchange,提问作者aftoncheese
相关产品推荐
相关产品推荐

