SQL之存在性问题分析-HQL面试题39_石榴姐yyds-CSDN博客_sql 石榴姐
存在性问题。求截止当前月退费总人数
退费人数:上月存在,这月不存在的学生个数。
表stu中字段day日期,stu_id学生id。
求每个月缴费名单,每个月分别合并stu_id。
按月份排序,获取下一月合并后的值。
当前的stu_id是否在下一月array数组中,如果存在标记0,不存在标记1。
对flag按月求和即为下一个月退费人数。
再将上一个月的退费人数获取到当前行,为每月的退费人数。
进行累加计算截止到当前月的退费总人数。
--
select
month,
sum(lag_month_cnt) over(order by month)
from(
select
month,
lag(next_month_cnt, 1, 0) over(order by month) as lag_month_cnt
from(
select
distinct t0.month as month,
sum(if(!array_contains(t1.lead_stu_id_arr,t0.stu_id),1,0)) over(partition by t0.month) as next_month_cnt
from(
select
substr(day,1,7) as month,
stu_id
from
stu
) t0
left join(
select
month,
lead(stu_id_arr, 1) over(order by month) as lead_stu_id_arr
from(
select
substr(day, 1, 7) as month,
collect_list(stu_id) as stu_id_arr
from
stu
group by
substr(day, 1, 7)
) m
) t1 on t0.month = t1.month
) n
) o
21、获取积分最多的人
SQL之获取积分最多的人--HQL面试题37_石榴姐yyds-CSDN博客_获得积分最多的人
查找积分最高的用户的id、名字、总积分。
用户表user:id,name
积分表grade_info:name,grade_num,type
type为add,积分是增加grade_num。type为reduce,积分是减少grade_num。
select t0.user_id as user_id,
t1.name as name,
t0.grade as grade
from(
select user_id,grade
from(
select user_id,
grade,
dense_rank() over(order by grade desc) as rn
from(
select user_id,sum(if(type='add',grade_num,-1*grade_num)) as grade
from grade_info
group by user_id
) m