1.数分SQL必知必会
1.1 字符串与逻辑运算执行顺序
题目
假设你是美团用户运营组的同学,计划在9月份给用户预热推送’十一旅游优惠团券’。
请找出2021年8月,在休闲娱乐或餐饮分类下,单笔消费金额超过(含)900元的用户共有多少人?
思路
计数:用户数
条件过滤:
(1)时间:2021年8月
(2)类型:休闲娱乐或餐饮
(3)单笔消费金额超过(含)900元
tips:
in ( <集合数据> )
name in (‘France’, ‘Germany’, ‘Italy’)
等同于
name =‘France’ or name =‘Germany’ or name =‘Italy’
答案
select count(distinct usr_id)
from trx_rcd
where
substr(trx_time,1,7)='2021-08'
and mch_typ in('休闲娱乐' ,'餐饮' )
and trx_amt>=900
1.2 星期函数的运用
题目
现有一张用户登录表,请问DAU高峰和低谷分别是周几?
思路
DAU是指当日活跃用户数
聚合计数:
计算数据库所有日期内,周一到周日的登录人数
答案
select
weekday(load_dt) as '星期'
, count(usr_id) as 'DAU'
from
td_load_rcd
group by weekday(load_dt)
order by 'DAU' desc
1.3 剔重的场景
题目
现有一张用户登录表,请统计MAU(月活跃用户数)趋势。以下说法错误的是:
思路
与上一题类似
且MAU(月活跃用户数)需要剔重
答案
select
substr(load_dt,1,7) as '月份'
, count(distinct usr_id)
from
td_load_rcd
group by substr(load_dt,1,7)
2.条件过滤
2.1 多条件判断
题目
请找出2021年国庆或2022年元旦假期期间,单笔交易金额超过10000元的所有客户。
思路
条件1:时间上在2021年国庆或2022年元旦期间(日期格式可以直接判断)
条件2:金额上,单笔交易金额超过10000元
答案
select *
from trx_rcd
where
(trx_time between '2022-01-01' and '2022-01-03' or (trx_time between '2021-10-01' and '2021-10-07'))
and trx_amt>10000
3.聚合函数与数学运算
3.1
题目
惠州金爵大酒店在哪一天迎来了首位客人
思路
答案
select min(trx_time)
from trx_rcd
where mch_nm='惠州金爵大酒店'
拓展题目
惠州金爵大酒店除了第一天,后面有客人的日期
**题目**
select *
from
trx_rcd
where trx_time>(select min(trx_time)
from trx_rcd
where mch_nm='惠州金爵大酒店')
and mch_nm='惠州金爵大酒店'
order by trx_time