基于日期键的 SQL 求和列
Posted
技术标签:
【中文标题】基于日期键的 SQL 求和列【英文标题】:SQL Summing columns based on date key 【发布时间】:2021-08-26 05:24:28 【问题描述】:我有一个链接中给出的数据集,DataSet
我想将“order_item_unit_status”列分隔为单独的列,并带来相同的相应交易金额。所需的输出如下所示。
目标是将 txn_amt 合并到各个类别中,并根据 txn_date_key 对它们进行分组。 (基本上基于 order_item_unit_status 列进行旋转,并分别带来 txn_amt。)
我使用了下面的代码,
Select *, CASE WHEN order_item_unit_status ='DELIVERED'
THEN txn_amt ELSE 0 END as DELIVERED,
CASE WHEN order_item_unit_status ='RETURNED'
THEN txn_amt ELSE 0 END as RETURNED
from sales
得到链接Output中提到的输出
输出未根据 txn_date_key 和找到的多个行项目进行分组。如果我使用 GROUP BY txn_date_key
,则会引发错误。
我还被告知服务器受HiveSQL支持,不支持使用“:”,日期时间,临时表无法创建。鉴于这些限制,我目前一直在纠结如何去做。
非常感谢您的帮助
【问题讨论】:
【参考方案1】:您必须使用group by
中的列:
编辑:还为正确的输出添加了SUM()
...
Select *,
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
from sales
group by txn_amt,txn_date_key,order_item_unit_status
在 hivesql 中你可以使用from_unixtime
命令
Unixtime
【讨论】:
【参考方案2】:所有未聚合和选择的列都属于分组依据。
这个查询产生你需要的结果:
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
from sales
group by txn_date_key
结果:
txn_date_key delivered returned
20190701 3200 0
20210631 0 3000
【讨论】:
嗨@leftjoin 我尝试了group by,但最终出现错误。请找到错误链接Link @Sid 使用我发布的查询:dbfiddle.uk/…。列可以分组或聚合。 @Sid 。 . .这实际上可以满足您的要求,并且应该是公认的答案。您接受的答案将返回给定日期的两行,一行用于交付,另一行用于退回。以上是关于基于日期键的 SQL 求和列的主要内容,如果未能解决你的问题,请参考以下文章