常用日期函数:
行转列的常规做法是,group by+sum(if())【或count(if())】
问题描述: 代码实现:
问题描述: 代码实现:
sql实现:
- 代码:
- 结果:
分析:
sql实现:
- 题目: 2021年11月每天新用户的次日留存率
- 思路:
- 先查询出每个用户第一次登陆时间(最小登陆时间)–每天新用户表
- 因为涉及到跨天活跃,所以要进行并集操作,将登录时间和登出时间取并集,这里union会去重–用户活跃表
- 将每天新用户表和用户活跃表左连接,只有是同一用户并且该用户第2天依旧登陆才会保留整个记录,否则右表记录为空
- 得到每天新用户第二天是否登陆表后,开始计算每天的次日留存率:根据日期分组计算,次日活跃用户个数/当天新用户个数
- 代码:
需求常见词:【每组xxx的第一个yyy的zzz】【每组xxx的最后一个】
【每组xxx的前n个】【每组最xx的前n个】
公式:row_number() over(partition by 组名) as rn,再筛选rn<=N名
sql代码:
- 题目:
- 代码
每类视频近一个月的转发量/率
- 题目: 有一张用户余额表dwd_fnd_bal_usr_dd, 包含user_id(用户id)、bal(当前余额)以及dt(日期) 问题:请补全所有用户的缺失余额
- 答案解析
使用 和 子句 使用 将表A和表B连接起来,然后使用 子句筛选出那些在表B中没有对应记录的行。
在使用group by的语句中,select 后面只能跟group by字段和聚合函数。
可以用在select后面去重 也可以用在聚合函数里,用于某个字段中的数据去重计算
-
解释
这条SQL语句的作用是从两个表 和 中根据 字段进行内连接(JOIN),并选择所有列的数据。 表示 是连接条件,且在 和 表中都存在。
-
详细说明
- JOIN 类型:默认情况下, 是 ,即只返回在 和 表中都有匹配 的行。
- USING 子句: 指定了连接的字段 ,这意味着:
- 返回的结果集包含 一次。
- 在结果集中不会重复,因为它在 和 表中都存在,并且是连接条件。
-
注意事项
- 字段冲突:如果连接的字段在两个表中名称不同,则不能使用 ,而需要使用 子句
- 连接类型:如果需要包括不匹配的行,可以使用 或 等。