SQL登录次数
表:user_login_detail
字段:user_id login_ts
表:order_info
字段:order_id user_id create_date total_amount
需求:从用户登录明细表 user_login_detail 和订单信息表 order_info 中查询每个用户的注册日期(首次登录日期)
总登录次数,2021登录次数 、订单数,订单金额
期望结果:
user_id register_date total_login_count login_count_2021 order_count_2021 order_amount_2021
1 -- 方法一 2 select 3 l.user_id,l.register_date ,l.total_login_count,l.login_count_2021 4 ,r.order_count_2021,r.order_amount_2021 5 6 from ( 7 select user_id,substr(login_ts,1,10) register_date ,total_login_count,login_count_2021 from ( 8 select user_id,login_ts,row_number() over(partition by user_id order by login_ts) lgr 9 ,count(user_id) over(partition by user_id) total_login_count 10 ,count(case when year(login_ts) = '2021' then user_id else null end) over(partition by user_id) login_count_2021 11 from user_login_detail 12 ) a where lgr = 1 13 14 ) l left join ( 15 select user_id,count(order_id) order_count_2021,sum(total_amount) order_amount_2021 from order_info 16 where create_date between '2021-01-01' and '2021-12-31' group by user_id 17 ) r on r.user_id = r.user_id 18 ; 19 20 21 22 -- 方法二 23 24 25 26 select 27 28 one.user_id,two.register_date 29 ,two.total_login_count 30 ,two.login_count_2021 31 ,one.order_count_2021 32 ,one.order_amount_2021 33 34 from ( 35 36 select user_id,count(order_id) order_count_2021,sum(total_amount) order_amount_2021 from order_info 37 where create_date between '2021-01-01' and '2021-12-31' group by user_id 38 ) one left join ( 39 40 select 41 distinct user_id 42 ,register_date 43 ,total_login_count 44 ,count(*) over(partition by user_id) login_count_2021 45 46 from ( 47 select 48 user_id 49 ,login_date 50 ,count(*) over(partition by user_id) total_login_count 51 -- 注意这里 first_value 的用法 52 ,first_value(login_date) over(partition by user_id order by login_date) register_date 53 54 from ( 55 select user_id,substr(login_ts,1,10) login_date from user_login_detail 56 ) a 57 ) b where year(b.login_date) = '2021' 58 ) two on one.user_id = two.user_id
浙公网安备 33010602011771号