热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

这5个超级经典SQL都不会,回去等通知吧

一、每门课程问题用一条SQL语句查询学生表每门课都大于80分的学生姓名。解决办法一:having思路:如果最小的课程都大于80分,那他

一、每门课程问题

用一条 SQL 语句查询 学生表每门课都大于 80 分的学生姓名。

解决办法一: having

思路:如果最小的课程都大于80分,那他所有的课程分数,肯定都大于80分!

代码实现

SELECT name
FROM xuesheng
GROUP BY name
HAVING MIN(score)> 80

解决办法二:not in

可以用反向思维,先查询出表里面有小于 80 分的 name,然后用 not in 去除掉

代码实现

SELECT DISTINCT name
FROM xuesheng
WHERE name NOT IN(SELECT DISTINCT nameFROM xueshengWHERE score <&#61;80);

二、topN 问题

案例&#xff1a;查询各科成绩前两名的记录

代码实现

row_number() over( partition by 课程 order by 成绩 desc) as rank
...
where rank <&#61; 2 -- 前两名

 

三、连续问题&#xff08;7 天连续登陆&#xff09;

实现思路:

因为每天用户登录次数可能不止一次&#xff0c;所以需要先将用户每天的登录日期去重。

再用row_number() over(partition by _ order by _)函数将用户id分组&#xff0c;按照登陆时间进行排序。

计算登录日期减去第二步骤得到的结果值&#xff0c;用户连续登陆情况下&#xff0c;每次相减的结果都相同。

按照id和日期分组并求和&#xff0c;筛选大于等于7的即为连续7天登陆的用户。

代码实现

SELECT user_id, MAX(count_val) AS max_count -- 查出了最大连续登陆&#xff0c;where>&#61;7,即7天连续
FROM (-- group by相同日期SELECT user_id, symbol_date, COUNT(*) AS count_valFROM (-- 日期减rank&#xff0c;连续登陆的话&#xff0c;会得到相同日期SELECT user_id, log_date, date_sub(log_date, CAST(rn AS INT)) AS symbol_dateFROM (-- 打上rank标识SELECT user_id, log_date, ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY log_date) AS rnFROM user_logging_format) c) dGROUP BY user_id, symbol_date
) e
GROUP BY user_id;

四、行转列问题

行转列可谓是经典中的经典了&#xff0c;必须掌握了&#xff01;

6行变2行&#xff0c;2列变3列

 

 

 

代码实现

SELECT SID,
MAX(case CID when &#39;01&#39; then score else 0 end) &#39;01&#39;,
MAX(case CID when &#39;02&#39; then score else 0 end)&#39;02&#39;,
MAX(case CID when &#39;03&#39; then score else 0 end)&#39;03&#39;
FROM SC
GROUP BY SID

五、留存问题

留存率是衡量用户质量的最重要指标之一&#xff0c;因此计算用户留存率是用户数据分析中必须掌握的技能之一。同样也成为了面试经典sql之一。

留存率指标中&#xff0c;通常需要关注次日留存、3日留存、7日留存和月留存。对新增用户而言&#xff0c;需要关注更细颗粒度的数据&#xff0c;也就是7日内每天的留存率。

代码实现

select
dd
, count( if(id&#61;lead_id and datediff(dd,lead_dd)&#61;1 ,id, null ) ) as &#39;1 日留存&#39;
, count( if(id&#61;lead_id7 and datediff(dd,lead_dd7)&#61;7 ,id, null ) ) as &#39;7 日留存&#39;
from
(
select
id, dd
, lead(dd,1) over(partition by id order by dd asc ) as lead_dd
, lead(id,1) over(partition by id order by dd asc ) as lead_id
, lead(dd,7) over(partition by id order by dd asc ) as lead_dd7
, lead(id,7) over(partition by id order by dd asc ) as lead_id7
from (
select &#39;slm&#39; as id, &#39;2018-12-26&#39; as dd
union all select &#39;slm&#39; as id, &#39;2018-12-27&#39; as dd
union all select &#39;slm&#39; as id, &#39;2018-12-28&#39; as dd
union all select &#39;hh &#39; as id, &#39;2018-12-26&#39; as dd
union all select &#39;hh &#39; as id, &#39;2018-12-28&#39; as dd ) aa

硬核资料&#xff1a;关注即私信或&#xff08;点击获取&#xff09;可领取行业经典书籍PDF。
技术互助&#xff1a;技术群大佬指点迷津&#xff0c;你的问题可能不是问题&#xff0c;求资源在&#xff08;技术群&#xff09;里喊一声。
面试题库&#xff1a;由P8大佬们共同投稿&#xff0c;热乎的大厂面试真题&#xff0c;持续更新中。&#xff08;点击获取&#xff09;
知识体系&#xff1a;含编程语言、算法、大数据生态圈组件&#xff08;Mysql、Hive、Spark、Flink&#xff09;、数据仓库 


推荐阅读
  • 马蜂窝数据总监分享:从数仓到数据中台,大数据演进技术选型最优解
    大家好,今天分享的议题主要包括几大内容:带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程;我个人认为数 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 在数据分析工作中,我们通常会遇到这样的问题,一个业务部门由若干业务组构成,需要筛选出每个业务组里业绩前N名的业务员。这其实是一个分组排序的 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • 11月26日,由中国计算机协会(CCF)主办,CCF大数据专家委员会协办,CSDN承办的Hadoop与大数据技术大会(Hadoop&BigDataTechnology ... [详细]
  • NetBPM的安装还是比较简单的,有比较详细的文档。1.当然是先下载运行程序了,netbpm-0.8.3.1.zip,官方网站ÿ ... [详细]
author-avatar
zhiting999977
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有