HiveSQL按日期键分组基于订单状态行转列统计交易金额问题
解决方案
你遇到的报错原因是原SQL使用SELECT *查询全部字段,仅对txn_date_key做分组时,其他非聚合字段没有加入GROUP BY子句也没有被聚合函数包裹,不符合SQL语法规范。
按照你的HiveSQL约束要求,不需要临时表、日期函数即可实现需求,修改思路是将状态判断逻辑嵌套到聚合函数内,按日期维度汇总对应状态的交易总额,最终实现行转列效果,参考代码如下:
SELECT txn_date_key, SUM(CASE WHEN order_item_unit_status = 'DELIVERED' THEN txn_amt ELSE 0 END) AS DELIVERED, SUM(CASE WHEN order_item_unit_status = 'RETURNED' THEN txn_amt ELSE 0 END) AS RETURNED -- 若存在其他order_item_unit_status取值,按上述格式新增对应字段即可 FROM sales GROUP BY txn_date_key;
上述语句执行后,每个txn_date_key仅会输出一行记录,各个状态字段存储对应日期下该状态的总交易金额,完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

