目录
相关表结构:
1、order_info表
2、order_detail表
题目及思路解析:
第一题,查询各品类销售商品的种类数及销量最高的商品
题目需求:
思路解析:
代码实现:
select
t1.category_id,
category_name,
sku_id,
name,
order_num,
order_cnt
from (
select
category_id,
si.sku_id,
name,
order_num,
rank() over (partition by category_id order by order_num desc ) rk,
count(distinct od.sku_id) over(partition by category_id) order_cnt
from (
select
sku_id,
sum(sku_num) order_num
from order_detail
group by sku_id )od
left join sku_info si on si.sku_id=od.sku_id )t1
left join category_info ci on ci.category_id=t1.category_id
where rk=1;
代码解析:
执行结果:
补充说明:
----------------------------------------------------------------------------------------------
第二题 查询用户的累计消费金额及VIP等级
题目需求:
思路解析:
代码实现:
select user_id,
create_date,
sum_so_far,
case
when sum_so_far >= 100000 then '钻石会员'
when sum_so_far >= 80000 then '白金会员'
when sum_so_far >= 50000 then '黄金会员'
when sum_so_far >= 30000 then '白银会员'
when sum_so_far >= 10000 then '青铜会员'
when sum_so_far >= 0 then '普通会员'
end vip_level
from (
select user_id,
create_date,
sum(total_amount_per_day) over (partition by user_id order by create_date) sum_so_far
from (
select user_id,
create_date,
sum(total_amount) total_amount_per_day
from order_info
group by user_id, create_date
) t1
) t2;
代码解析:
执行结果:
----------------------------------------------------------------------------------------------
第三题 查询首次下单后第二天连续下单的用户比率
题目需求:
思路解析:
代码实现:
select
concat(round(sum(if(datediff(buy_date_second, buy_date_first) = 1, 1, 0))
/ count(*) * 100, 1), '%') percentage
from (
select user_id,
min(create_date) buy_date_first,
max(create_date) buy_date_second
from (
select user_id,
create_date,
rank() over (partition by user_id order by create_date) rk
from (
select user_id,
create_date
from order_info
group by user_id, create_date
) t1
) t2
where rk <= 2
group by user_id
) t3;
注意:
1、字符串连接函数:concat
hive> select concat(‘abc’,'def’,'gh’) from iteblog;
abcdefgh
2、取整函数: round
hive> select round(3.1415926) from iteblog;
3
hive> select round(3.5) from iteblog;
4
hive> create table iteblog as select round(9542.158) from iteblog;
hive> describe iteblog;
_c0 bigint
代码解析:
执行结果: