109号
109号
全部文章
题解
归档
标签
去牛客网
登录
/
注册
109号的博客
全部文章
/ 题解
(共11篇)
统计牛客每个日期登录新用户个数
两种解法: 使用count计算每日新用户个数 使用case和窗口函数计算每个用户的登陆次数序号,选取第一次登陆的计数 使用count计算每日新用户个数时,要注意不能遗漏新用户个数为0的日期,可以使用union补充上 SELECT l.mdate AS date,COUNT(user_id) AS...
排序
sql
2020-12-07
5
763
统计牛客每个用户刷题信息
两种方法: 使用窗口函数SUM,将日期作为“窗口”计算累加刷题数量 使用自联结 窗口函数 SELECT name AS u_n,date, SUM(number) OVER (PARTITION BY user_id ORDER BY date) AS ps_num FROM passing_n...
sql
联结
2020-12-07
14
1573
找出每个岗位分数排名前2的用户
两种方法: 使用窗口函数计算排名,再筛选排名前2的用户 使用自联结和count函数计算排名,再筛选排名前2的用户 使用窗口函数dense_rank(),将language_id作为排序的“窗口”,按照得分降序排列 SELECT a.id,name,score FROM ( SELECT ...
排序
sql
2020-12-07
8
1071
统计正常用户发送给正常用户邮件失败的概率
两种方法: 使用联结,分别计算正常用户发送邮件的总次数和发送失败的次数,再计算失败的比率: 使用case计算正常用户发送邮件失败的次数,再计算失败的比率 使用联结,这是比较容易想起来的方法: 计算正常用户发送邮件失败的次数 SELECT date,COUNT(id) AS cnt1 FROM e...
sql
2020-12-06
3
810
考试分数(5):查询各岗位分数的中位数位置上的所有grade信息
去网上搜了一下答案,当总数为偶数时,两个数的逆序或者顺序都会差1,使用abs()函数求绝对值;这里还需要使用Cast是因为不转换的话,可能序列号太大超出上限,太小超出下限0,从而报错修改一下代码: select id,a.job,score,t_rank from( select id,job,sc...
sql
排序
联结
2020-12-06
7
779
牛客每个日期新用户的次日留存率
这个题目关键的是找到每天的新用户数和次日的新用户留存数容易忽略的是留存为0的日期 SELECT a.date,ROUND(COUNT(DISTINCT login.user_id)/ COUNT(a.user_id),3) AS p FROM (这个查询是为了找到每天的新用户数 SELECT...
比率
sql
2020-12-06
8
807
牛客用户每个人最近登陆的日期
这里关键是要筛选出来最近登陆的日期,再去和user、client两个表联结,最近登陆的条件需要特别注意,可以使用(user_id,date)in的方法,也可以使用联结,在联结时需要使用两个条件,即login.date=a.mdate和login.user_id=a.user_id SELECT us...
sql
联结
2020-12-03
7
668
获取员工当前的薪水比其manager当前薪水还高的相关信息
拆解问题:先找到员工的工号和薪水,经理的工号和薪水,再使用dept联结起来两个表 SELECT salaries.emp_no,dept_manager.emp_no AS manager_no,salaries.salary AS emp_salary,s1.salary AS manager_s...
sql
联结
2020-12-03
0
541
获取所有非manager员工当前的薪水情况
这里给出了四个表,每个表里都有一个主键emp_no,所以这里要注意的是每个表里的emp_no范围是否相同。理论上来说,employees表里的数据应该是员工信息最全、最准确的,dept_emp、dept_manager中的emp_no是employees中的子集,salaries中的emp_no可能...
sql
联结
2020-12-03
8
1022
查找所有员工自入职以来的薪水涨幅情况
需要分别找到入职时的薪水和当前薪水。入职时的薪水,可以通过employees表中的hire_date和salaries中的from_date来确定,当前薪水通过to_date='9999-01-01'来确定,再连接两个表,相减可得出薪水涨幅,最后使用order by排序 代码块 SELECT e.e...
sql
2020-12-03
3
653
首页
上一页
1
2
下一页
末页