数仓面试sql题目-hive-sql

本文介绍了两个SQL查询案例。第一个案例展示了如何从table1表中找出相互关注的用户,通过将数据进行笛卡尔积并进行分组计数。第二个案例涉及orders表,计算每日及当月累计金额,使用了日期处理和条件求和函数。这些SQL技巧对于数据处理和分析非常实用。

题目1:有表table1,里面有2列,列a和列b,对应社区相互关注的用户,怎么找到相互关注的一组用户

答:

select 	a
		,b
from 	(
			select 	a
					,b
			from 	table1
			union all
			select 	b
					,a
			from 	table1
		) t1
group by a
		 ,b
having 	count(1) > 1
;

题目2:orders表,dt,uid,amount,计算当日和当月的累计值,假定这个日期会跨月

select 	t1.uid
		,sum(if(t1.dt = t2.dt,amount,0)) as day_amount
		,sum(if(t2.dt between t1.dt1 and t1.dt,amount,0)) as all_amount
from 	(
			select 	uid
					,dt
					,concat(substr(dt,1,6),01) as dt1 	--当月最小日期
			from 	orders
		) t1
join 	(
			select 	uid
					,dt
					,sum(amount) as amount
			from 	orders
			group by uid
					 ,dt
		) t2
on 		t1.uid = t2.uid
group by t1.uid
;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值