hive练习题(一)
数据表ods_sales_orders前10列的数据
题目:计算每个用户截止到每月为止的最大交易金额和累计到该月的总交易金额
题干分解:每个用户、截止到每月为止的最大交易金额和累计总交易金额
第一步:计算每位用户在每月消费的总金额
create table temp as
select customer_key,DATE_FORMAT(create_date,'YYYY-MM') AS umonth,sum(unit_price) AS usum FROM ods_sales_orders GROUP BY customer_key,DATE_FORMAT(create_date,'YYYY-MM');
第二步:计算截止到每月为止的最大交易金额和累计总交易金额
知识点:窗口函数
SELECT customer_key,umonth,ucount,
MAX(usum) over(PARTITION BY customer_key ORDER BY umonth ROWS
BETWEEN unbounded preceding AND current ROW) AS current_max,
SUM(usum) over(PARTITION BY customer_key ORDER BY umonth ROWS
BETWEEN unbounded preceding AND current ROW) AS current_sum
FROM temp LIMIT 10;
over中的partition by customer_key order by umonth 针对客户编号这一组按照月份进行排序,ROWS
BETWEEN unbounded preceding AND current ROW指的是按照在当前行不限定的往前处理,也就是处理当前以及之前所有行的sum(),max(),比如客户编号为1358999只在2月份和4月份消费,那么累计到4月份的消费金额就是2月份消费金额加上4月份的消费金额。