[hiveSQL面试题2]

本文提供了一系列Hive SQL面试题,包括店铺访问次数Top3的访客信息查询,2017年各月订单数、用户数、金额统计,新客数计算,以及活跃用户数量和平均年龄的分析。详细解析了每道题目所涉及的SQL语句和处理逻辑。

一、示例数据:某网店用户访问表部分数据(user_id:用户ID,shop:店铺名,表名:visit)如下

在这里插入图片描述

(一)需求:每个店铺访问次数Top3的访客信息(输出店铺名称、访客id、访问次数)。

(1)查询每个店铺被每个用户访问次数

create temporary table tb1 as
select
    shop,
    user_id,
    count(1) cnt
from visit
group by shop,user_id;

输出结果如下图:
在这里插入图片描述
(2)计算每个店铺被用户访问次数排名,取每个店铺排名前3的

select
    user_id,shop,cnt,rank
from(
    select
        shop,
        user_id,
        cnt,
        row_number() over(partition by shop order by cnt) rank
    from tb1 a
) b
where rank <= 3;

输出结果如下图:
在这里插入图片描述

二、示例数据:某订单表信息(表名:)如下:

visit_Date:日期
Order_id:订单ID
User_id:用户ID
amount:交易金额
在这里插入图片描述

(二)需求:求出 2017年每个月的订单数、用户数、总成交金额。

select
    substr(visit_date,1,7) as mth,      --月份
    count(Order_id) as order_cnt,       --月订单数
    count(distinct user_id) as user_cnt,--用户数
    sum(amount) as amount               --月总成交额
from order_info
group by substr(visit_date,1,7);

输出结果如下图:
在这里插入图片描述
sql解析:
这里需要用到截取日期的函数,也可以使用date_format(visit_date,‘YYYY-MM’)进行格式转换。

(一)需求:求出2017年1月的新客数(指在1月才有第一笔订单)

select
	user_id,              --这里便于好看理解列出新客的user_id
    count(user_id) as cnt
from order_info
group by user_id
having date_format(min(visit_date),'YYYY-MM') = '2017-01';

输出结果如下图:
在这里插入图片描述
sql解析:
我们按user_id进行分组后会得到用户的所有交易日期,通过having过滤指定新客月份即可得出新客总数。

三、示例数据:用户信息表数据如下(表名:user_info)

User_id:用户ID
User_age:用户年龄
Login_date:登录日期
在这里插入图片描述

<
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值