热门标签 | 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;、数据仓库 


推荐阅读
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在处理数据库中所有用户表的彻底清除时,目前尚未发现单一命令能够实现这一目标。因此,需要采用一种较为繁琐的方法来逐个删除相关表及其结构。具体操作可以通过编写PL/SQL脚本来实现,该脚本将动态生成并执行删除表的SQL语句。尽管这种方法相对复杂,但在缺乏更简便手段的情况下,仍是一种有效的解决方案。未来或许可以通过数据库管理工具或更高版本的数据库系统提供更简洁的处理方式。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本指南从零开始介绍Scala编程语言的基础知识,重点讲解了Scala解释器REPL(读取-求值-打印-循环)的使用方法。REPL是Scala开发中的重要工具,能够帮助初学者快速理解和实践Scala的基本语法和特性。通过详细的示例和练习,读者将能够熟练掌握Scala的基础概念和编程技巧。 ... [详细]
  • 如何高效启动大数据应用之旅?
    在前一篇文章中,我探讨了大数据的定义及其与数据挖掘的区别。本文将重点介绍如何高效启动大数据应用项目,涵盖关键步骤和最佳实践,帮助读者快速踏上大数据之旅。 ... [详细]
  • 在第二课中,我们将深入探讨Scala的面向对象编程核心概念及其在Spark源码中的应用。首先,通过详细的实战案例,全面解析Scala中的类和对象。作为一门纯面向对象的语言,Scala的类设计和对象使用是理解其面向对象特性的关键。此外,我们还将介绍如何通过阅读Spark源码来进一步巩固对这些概念的理解。这不仅有助于提升编程技能,还能为后续的高级应用开发打下坚实的基础。 ... [详细]
  • 如何在Spark数据排序过程中有效避免内存溢出(OOM)问题
    本文深入探讨了在使用Spark进行数据排序时如何有效预防内存溢出(OOM)问题。通过具体的代码示例,详细阐述了优化策略和技术手段,为读者在实际工作中遇到类似问题提供了宝贵的参考和指导。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在PHP中,高效地分割字符串是一项常见的需求。本文探讨了多种技术,用于在特定字符(如“或”)后进行字符串分割。通过使用正则表达式和内置函数,可以实现更加灵活和高效的字符串处理。例如,可以使用 `preg_split` 函数来实现这一目标,该函数允许指定复杂的分隔符模式,从而提高代码的可读性和性能。此外,文章还介绍了如何优化分割操作以减少内存消耗和提高执行速度。 ... [详细]
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社区 版权所有