SQL实战 9.高频SQL面试题 网站访客最近登录日期系列

news/2024/5/20 2:06:25/文章来源:https://blog.csdn.net/weixin_42007892/article/details/122423081


最近登录日期(一)

描述

某网站每天有很多人登录,请你统计一下该网站每个用户最近登录是哪一天,用的是什么设备.
有一个登录(login)记录表,简况如下:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了该网站
。。。
第4行表示user_id为3的用户在2020-10-13使用了客户端id为2的设备登录了该网站
还有一个用户(user)表,简况如下:

还有一个客户端(client)表,简况如下:

请你写出一个sql语句查询每个用户最近一天登录的日子,用户的名字,以及用户用的设备的名字,并且查询结果按照user的name升序排序,上面的例子查询结果如下:

fh最近的登录日期在2020-10-13,而且是使用ios登录的
wangchao最近的登录日期也是2020-10-13,而且是使用ios登录的

SQL如下

select  u_n,c_n ,date from 
(
select a.user_id,a.date,b.name as u_n,c.name as c_n,row_number() over(partition by user_id order by date desc)as rnfrom login a left join user b on a.user_id=b.id left join client c on a.client_id=c.id
)a where rn=1 
order by u_n

 

最近登录日期(二)

描述

某网站每天有很多人登录,请你统计一下该网站新登录用户的次日成功的留存率,
有一个登录(login)记录表,简况如下:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了该网站
。。。
第4行表示user_id为3的用户在2020-10-12使用了客户端id为2的设备登录了该网站
。。。
最后1行表示user_id为1的用户在2020-10-14使用了客户端id为2的设备登录了该网站

请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:
查询结果表明:
user_id为1的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存
user_id为2的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存
user_id为3的用户在2020-10-12第一次新登录了,在2020-10-13没登录了,算是失败的留存
user_id为4的用户在2020-10-13第一次新登录了,在2020-10-14没登录了,算是失败的留存
固次日成功的留存率为 2/4=0.5
(sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),四舍五入的函数为round,sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5
mysql里查找某一天的后一天的用法是:DATE_ADD(yyyy-mm-dd,INTERVAL 1 DAY),四舍五入的函数为round)

 SQL如下

select 
round(count(distinct user_id)*1.0/(select count(distinct user_id) from login) ,3)
from login
where (user_id,date)
in (select user_id,DATE_ADD(min(date),INTERVAL 1 DAY) from login group by user_id);


最近登录日期(三)

描述

牛客每天有很多人登录,请你统计一下牛客每个日期登录新用户个数,
有一个登录(login)记录表,简况如下:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网,因为是第1次登录,所以是新用户
。。。
第4行表示user_id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网,因为是第2次登录,所以是老用户
。。
最后1行表示user_id为4的用户在2020-10-15使用了客户端id为1的设备登录了牛客网,因为是第2次登录,所以是老用户
请你写出一个sql语句查询每个日期登录新用户个数,并且查询结果按照日期升序排序,上面的例子查询结果如下:

查询结果表明:
2020-10-12,有3个新用户(user_id为2,3,1)登录
2020-10-13,没有新用户登录
2020-10-14,有1个新用户(user_id为4)登录
2020-10-15,没有新用户登录

 SQL如下

解法一:暴力破解法,求出每个用户的首次登陆日期,并统计每个日期的人数即可,但题目要求当天没有人的话要给出0,所以这里需要join一下自己,取没有用户登陆的日期;

select a.date,case when b.cnt is null then 0 else b.cnt end as cnt from 
(select distinct date from login )a left join 
(select date,count(1) as cnt from 
(
select id,user_id,client_id,date,
row_number() over(partition by user_id order by date) as rn from login a 
)a 
where rn=1 group by date
) b
on a.date=b.date

解法二: 用 (user_id,date) in (user_id,min(date)) 得到每天登陆的新用户,最后用sum case when来统计

select distinct date,
sum(case when (user_id,date) in (select user_id,min(date) from login group by user_id )then 1 else 0 end   )
from login group by date order by date


最近登录日期(四)

描述

某网站每天有很多人登录,请你统计一下每个日期新用户的次日留存率。
有一个登录(login)记录表,简况如下:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了该网站,因为是第1次登录,所以是新用户
。。。
第4行表示user_id为2的用户在2020-10-13使用了客户端id为2的设备登录了该网站,因为是第2次登录,所以是老用户
。。
最后1行表示user_id为4的用户在2020-10-15使用了客户端id为1的设备登录了该网站,因为是第2次登录,所以是老用户
请你写出一个sql语句查询每个日期新用户的次日留存率,结果保留小数点后面3位数(3位之后的四舍五入),并且查询结果按照日期升序排序,上面的例子查询结果如下:

查询结果表明:
2020-10-12登录了3个(user_id为2,3,1)新用户,2020-10-13,只有2个(id为2,1)登录,故2020-10-12新用户次日留存率为2/3=0.667;
2020-10-13没有新用户登录,输出0.000;
2020-10-14登录了1个(user_id为4)新用户,2020-10-15,user_id为4的用户登录,故2020-10-14新用户次日留存率为1/1=1.000;
2020-10-15没有新用户登录,输出0.000;
(注意:sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, '+1 day'),sqlite里1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5)

SQL如下

select c.date,
round(count(d.user_id)/count(*),3)as p
from
(select a.date,b.user_id from
(select distinct l1.date from login l1)a left join 
(select l2.user_id,min(l2.date) as f_date from login l2 group by l2.user_id)b
on a.date=b.f_date
) as c left join (select distinct l3.user_id
from login l3,login l4
where l3.user_id=l4.user_id
and DATE_ADD(l3.date,INTERVAL 1 DAY)=l4.date) as d on c.user_id = d.user_id
group by c.date

最近登录日期(五)

描述

牛客每天有很多人登录,请你统计一下牛客每个用户查询刷题信息,包括: 用户的名字,以及截止到某天,累计总共通过了多少题。 不存在没有登录却刷题的情况,但是存在登录了没刷题的情况,不会存在刷题表里面,有提交代码没有通过的情况,但是会记录在刷题表里,只不过通过数目是0。
有一个登录(login)记录表,简况如下:

第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备登录了牛客网
。。。
第5行表示user_id为3的用户在2020-10-13使用了客户端id为2的设备登录了牛客网
有一个刷题(passing_number)表,简况如下:

第1行表示user_id为2的用户在2020-10-12通过了4个题目。
。。。
第3行表示user_id为1的用户在2020-10-13提交了代码但是没有通过任何题目。
第4行表示user_id为4的用户在2020-10-13通过了2个题目
还有一个用户(user)表,简况如下:
请你写出一个sql语句查询刷题信息,包括: 用户的名字,以及截止到某天,累计总共通过了多少题,并且查询结果先按照日期升序排序,再按照姓名升序排序,有登录却没有刷题的哪一天的数据不需要输出,上面的例子查询结果如下:

查询结果表明:
fh在2020-10-12为止,总共通过了4道题,输出为4
wangchao在2020-10-12为止,总共通过了1道题,总计为1
tm在2020-10-12为止只登陆了没有刷题,故没有显示出来
tm在2020-10-13为止刷了题,但是却没有通过任何题目,总计为0
wangchao在2020-10-13通过2道,但是加上前面2020-10-12通过1道,故在2020-10-13为止总共通过了3道题,总计为3

解题思路 

1.先找出每个用户都在那一天登陆了:

select distinct user_id,date from login

2.然后去与passing_number表关联小于或等于当前日期的数据,当然也别忘了关联user表去取一下name:

select c.name,a.user_id ,a.date,b.number from 
(select distinct user_id,date from login) a,
passing_number b ,user c    where a.user_id=b.user_id and a.user_id =c.id 
and b.date<=a.date

3.最后求每个user每天的刷题数量,用sum()+group by 即可:

SQL如下

select name,date,sum(number) from 
(
select c.name,a.user_id ,a.date,b.number from 
(select distinct user_id,date from login) a,
passing_number b ,user c    where a.user_id=b.user_id and a.user_id =c.id 
and b.date<=a.date
) b group by name ,date order by date, name

 本文SQL题目来源于牛客网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_823704.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非英文网站如何使用MySQL的字符集

使用 MySQL字符集 对于非英文网站&#xff0c;当他们使用非英语语言从数据库中写入或读取数据时&#xff0c;常常必须解决字符集的问题。字符集指导数据库哪种字符编码方案用于数据的写入读取,这样可以简单地理解为字符集的一个子集整理&#xff0c;它告诉数据库如何存储数据。…

【杂记】一个不错的国外论文没费下载网站

Researchgate https://www.researchgate.net 搜索页面https://www.researchgate.net/search?q 比如搜索"virtual trackball" 下面这篇是我想要的 总结 还是非常好的一个网站&#xff0c;IT技术类的论文非常多&#xff01;

【C++】已编译好的OpenSSL Windows版分享网站

http://slproweb.com/products/Win32OpenSSL.html &#xff08;文章末尾附下载列表&#xff09; 说明&#xff1a; 例如&#xff1a;Win32 OpenSSL v1.1.1c -- 02.Win32OpenSSL-1_1_1c.exe安装后目录如下 基于此安装可以进行OpenSSL的二次开发&#xff0c;bin/lib/include开…

网络爬虫重庆交通大学新闻网站中所有的信息通知

目录一、创建anaconda虚拟环境二、爬虫怕爬取信息&#xff08;1&#xff09;爬取南阳理工学院ACM练习题目数据&#xff08;例子&#xff09;&#xff08;2&#xff09;爬取重庆交通大学新闻网站中所有的信息通知三、总结四、参考链接一、创建anaconda虚拟环境 1.打开Anaconda …

使用fiddler 去分析视频网站

目录一、VLC下载二、fiddler 去分析bilibili三、参考链接一、VLC下载 官网下载地址&#xff1a; https://www.videolan.org/vlc/ 一些公开的视频网址&#xff1a; 动画片 rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 景点摄像头 https://hd-auth.s…

9个提高SEO文章的排名的写作方法和例子

爱发猫认为在开始编写文本之前&#xff0c;请做好充分的准备。 良好的准备对于顺利写出更高质量的文章至关重要。 有两点需要考虑。 准备写作 成为人物 考虑搜索意图 将构图视为一个角色 爱发猫认为写作时&#xff0c;你是否有一个先入为主的观念&#xff0c;即必须在固定…

如何通过6个简单步骤让百度收录你的网站

我们都依靠百度强大的搜索引擎来帮助我们度过我们的生活。从了解最新趋势到获得解决问题的建议&#xff0c;我们很难想象没有它我们会在哪里。很容易将此平台视为我们用来搜索有关其他人、地点或事件的信息的平台。然而&#xff0c;作为小企业主&#xff0c;您还需要积极思考人…

SEO关键词措施的20种方法

自社交媒体兴起以来&#xff0c;SEO关键词营销的有效性常常被忽视。 但是&#xff0c;从 SEO 收集的访问是一个具有高度使命感的人&#xff0c;因此与通过社交访问相比&#xff0c;会产生更高的转化率。 因此&#xff0c;通过不仅关注社交媒体措施而且关注搜索引擎措施&#…

爱发猫自动建站程序,自动发布,自动推送,自动收录

只要指定一组长尾词&#xff0c;自动建站系统会围绕这组长尾词继续挖掘长尾词并生成标题和内容。 包括内链系统&#xff0c;百度推送&#xff0c;自动图片。 爱发猫自助建站系统介绍https://www.zgybz.com/?id12 购买后客户会培训如何使用。下图是文章生成效果&#xff0c;带…

内容营销与SEO之间的区别

爱发猫认为内容营销和搜索引擎优化是经营网站的两个最重要的方面。 然而&#xff0c;内容营销常常被误解为吸引客户的一种手段&#xff0c;其含义也常常与搜索引擎优化相混淆。 在这篇文章中&#xff0c;我们将详细解释内容营销和SEO之间的区别&#xff0c;以便你能正确理解它。…

通过文章 seo 让您的博客提高收录的方法

“我尝试创作内容&#xff0c;但它没有出现在搜索引擎的首页。” 你在创作内容时有过这种感觉吗&#xff1f; 只要努力&#xff0c;就想稳稳拿下百度首页。 如果可以的话&#xff0c;你想把它放在第一页。 在这种情况下&#xff0c;推荐内容 seo&#xff01; 通过将其整合…

seo好收录的文章写作技巧

“我想采取 SEO 措施并将我的网站显示在搜索结果的顶部。” 您可能会担心“我想把写作作为副业&#xff0c;但如果我不知道 SEO 写作&#xff0c;可能很难找到工作”。 在这种情况下&#xff0c;我们建议您彻底学习一次 SEO 编写方法。 通过学习 SEO 写作&#xff0c;当您的网…

如何用长尾seo吸引客户

现在在家工作受到关注&#xff0c;许多人可能已经开始写博客和网络写作&#xff0c;可以在家里完成。 但是访问量并没有轻易增加&#xff0c;我要瞄准更高的显示&#xff01;你有这种感觉吗&#xff1f; 如果你努力工作&#xff0c;你想目标更高。 在这种情况下&#xff0c;…

博客文章需要标题标签如何在 seo 方面正确书写和附加

“你真的需要博客标题吗&#xff1f;” “我遇到了麻烦&#xff0c;因为我不知道如何写博客标题。” 你有过这样的感觉吗&#xff1f; 博客标题起着非常重要的作用&#xff0c;但是如果您知道如何正确地编写它们&#xff0c;它们将是许多人会看到的文章。 有了正确的标题&a…

网站手机端seo优化方法和技巧

作为一个寻求名声的网站所有者&#xff0c;从你选择创建一个网站的那一刻起&#xff0c;你就知道SEO&#xff08;搜索引擎优化&#xff09;是一个高度优先事项&#xff0c;这就是为什么现在是调整的好时机。SEO是一个不断发展的领域&#xff0c;百度对网站排名的方式有很多修改…

如何通过 6 个简单步骤在百度上看到您的网站

我们都依赖百度强大的搜索引擎来帮助我们管理我们的生活。从了解最新趋势到获得解决问题的建议&#xff0c;我们会发现很难想象没有它我们会在哪里。我们很容易认为这个平台是我们用来搜索关于其他人、地方或事件的信息的东西。然而&#xff0c;作为一个小企业主&#xff0c;你…

什么是反向链接,为什么它对 SEO 很重要?

我们大多数人都希望创建一个在百度搜索中排名靠前的网站。毕竟&#xff0c;拥有一个排名良好的网站是带来源源不断的新客户的有力途径。首先&#xff0c;你要看看我们的网站建设者&#xff0c;因为爱发猫为你的网站提供了最好的SEO。接下来&#xff0c;虽然没有神奇的公式来提高…

seo写作是一种提高网站百度排名的方法

我想改善我的网站的搜索引擎优化&#xff0c;使其在搜索结果中排名更高。 你可能会想&#xff0c;"我想做一些兼职写作&#xff0c;但如果我不知道如何做SEO&#xff0c;那么可能很难得到工作。" 如果是这种情况&#xff0c;我们建议你学习如何进行SEO写作。 学习SEO…

谷歌和用户来说是重要的seo措施

SEM自由度大&#xff0c;SEO自由度小。SEM&#xff0c;你可以通过广告平台设置预算&#xff0c;并根据不同的关键词决定要展示的标题、内容和登陆页面。在SEO中&#xff0c;页面的标题是固定的&#xff0c;登录页面是固定的&#xff0c;显示的文字可能基于网页的描述或其他相关…

博客的理想字数是8,000字--3,000字,是seo的最低字数

也能体现这篇文章在SEO中起到的作用。优化后的数据很科学&#xff0c;不需要写很长的文章来优化。当然&#xff0c;仁者见仁&#xff0c;智者见智。但是我觉得很多人都怕长内容头疼。长内容本身是seo人无法选择的&#xff0c;因为写一篇长文章是需要时间的。另外&#xff0c;se…