1.排序函数
rank() over(partition by 字段名 order by 字段名)
例题:请你取出下表表information中每个学校最低的gpa
id | device_id | university | gpa |
1 | 2812 | 北京大学 | 3.5 |
2 | 2242 | 复旦大学 | 3.2 |
3 | 1821 | 山东大学 | 4.2 |
4 | 2833 | 北京大学 | 3.6 |
5 | 1282 | 清华大学 | 3.7 |
根据示例,你的查询结果应参考以下格式,输出结果按university升序排序:
device_id | university | gpa |
2812 | 北京大学 | 3.5 |
2242 | 复旦大学 | 3.2 |
1282 | 清华大学 | 3.7 |
1821 | 山东大学 | 4.2 |
解析:1.根据学校分组求最低gpa 2.按university升序排序
select device_id,university,gpa from
(select device_id,university,
rank() over(partition by university order by gpa) as rk
,gpa from information) a
where a.rk=1 order by university;
2.留存率问题
date_add函数,表示date2与date1间隔一天
data2=date_add(data1,interval 1 day)
现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。明细表detail如下:
device_id | date |
2138 | 2021-05-09 |
2290 | 2021-05-03 |
2290 | 2021-06-03 |
... | ... |
要求结果如下:
avg_ret |
0.3000 |
select count(a2.date)/count(a1.date) as avg_ret
from
(select distinct device_id, date
from question_practice_detail) a1
left join
(select distinct device_id,date
from question_practice_detail)a2
on a1.device_id=a2.device_id and a2.date=date_add(a1.date,interval 1 day)