条件函数
计算25岁以上和以下的用户数量
以下是修复后的Markdown内容,保持引用格式并优化表格展示:
题目:现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段,分别查看这两个年龄段用户数量
本题注意:age为null 也记为 25岁以下示例:user_profile
id device_id gender age university gpa active_days_within_30 question_cnt answer_cnt 1 2138 male 21 北京大学 3.4 7 2 12 根据题目要求,你的查询应返回以下结果(注意age为null的情况应归类为25岁以下):
age_cut number 25岁以下 4 25岁及以上 3
新知识点
Q : 这个 age_cut , 25岁以下 ,25岁以上 是怎么插进去的
A : 原来 我们 SELECT CONST STRING, 那么就会输出对应的 STRING
Q : 怎么进行判断 25 岁以下, 25岁以上
A :
- 第一种方法, 使用
CASE (WHEN ... ELSE) END的形式 - 第二种方法, 使用
IF(JUDGE , TRUE, FALSE)很明显 这种语句只支持两个结果
所以对于本体 我们的做法 是 SIWTCH ( CONST STRING ) FROM TABLE 的形式
|
|
|
|
坑点 :
- 由于这里使用了
COUNT()这个聚合函数,所以必须加上GROUP BY - 当我们涉及查询 既有聚合函数
COUNT,SUM,AVG,MAX,MIN, 又有普通列的时候,就必须用GRUOP BY - 分组后, 如果我们想要对结果进行筛选必须使用
HAVING,WHERE是分组前筛选,HAVING是分组后筛选
日期函数
计算用户8月每天的练题数量
以下是修复后的Markdown内容,保持引用格式并优化表格展示:
题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据
示例:question_practice_detail
id device_id question_id result date 1 2138 111 wrong 2021-05-03 根据题目要求,你的查询应返回以下结果(按日期升序排列):
day question_cnt 13 5 14 2
新知识点
Q : 如何获取 日期 day , month , year 的信息
- sql 支持使用
year(), month(), day()的形式获取对应的 年月日 WEEKDAY()返回星期索引 , 0 = 星期一 …QUATER()返回季度 , 范围1-4MINUTE() , SECOND()
|
|
|
|
思路
- 这题 在知道如何操作日期之后就很简单了
|
|
计算用户的平均次日留存率
以下是修复后的Markdown内容,保持引用格式并优化表格展示:
题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的留存率。请你取出相应数据
示例:question_practice_detail
id device_id question_id result date 1 2138 111 wrong 2021-05-03 根据示例,你的查询应返回以下结果(保留4位小数):
avg_ret 0.3000
题目要求 :
- 计算 用户连续两天 都做题的占比
- 注意一个用户一天可以做多个题
思路 :
- 首先我们需要知道 如何比较
有一条数据 是 另外一条数据的 第二天2. 我们可以使用上面学到的DATE_ADD(DATE , INTERVAL X Y)比较 如果P1.DATE = DATE_ADD()的话那么就说明相差一天 3. 因此我们肯定是DAY 1 TABLE JOIN DAY 2 TABLE4. 由于我们需要知道DAY 1的总数,所以我们需要LEFT JOIN
|
|