当前位置: 首页 > news >正文

Sql刷题日志(day3)

一、笔试

1、min(date_time):求最早日期

2、mysql中distinct不能与order by 连用,可以用group by去重

二、面试

1、SQL中如何利用replace函数统计给定重复字段在字符串中的出现次数

(length(all_string)-length(all_string,目标字符串,''))/length(target_string)

2、讲一下Union和Join的区别

  • UNION是两张表进行上下拼接,产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集,分为UNION(去重)UNION ALL两种方法;
  • JOIN 是两张表进行左右连接,条件匹配的记录将合并产生一个记录集,有LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN等多种方法。

3、说一下SQL窗口函数并举例

(1)聚合函数与窗口函数区别

①聚合函数是将多条记录聚合为⼀条;窗⼝函数是每条记录都会执行,有几条记录执行完还是几条。

②聚合窗口函数:sum、count、avg、max、min

聚合函数也可以⽤于窗⼝函数。(原因就在于窗⼝函数的执⾏顺序(逻辑上的)是在FROM,JOIN,WHERE, GROUP BY,HAVING之后,在ORDER BY,LIMIT,SELECT DISTINCT之前。它执⾏时GROUP BY的聚合过程已经完成了,所以不会再产⽣数据聚合。)

注:窗口函数是在where之后执行的,所以如果where子句需要用窗口函数作为条件,需要多⼀层查询,在子查询外面进行

(2)窗口函数的基本用法

over关键字用来指定函数执⾏的窗⼝范围,若后⾯括号中什么都不写,则意味着窗口包含满足WHERE条件的所有行,窗口函数基于所有行进行计算;如果不为空,则⽀持以下4中语法来设置窗⼝。

window_name:给窗口指定⼀个别名。如果SQL中涉及的窗口较多,采用别名可以看起来更清晰易读

partition by子句:窗口按照哪些字段进⾏分组,窗⼝函数在不同的分组上分别执⾏

order by子句:按照哪些字段进⾏排序,窗⼝函数将按照排序后的记录顺序进⾏编号 

frame子句:frame是当前分区的⼀个子集,子句⽤来定义子集的规则,通常⽤来作为滑动窗⼝使⽤

(3)(面试考点)序号函数:row_number(),rank(),dense_rank()的区别

①ROW_NUMBER():顺序排序——1、2、3

②RANK():并列排序,跳过重复序号——1、1、3

③DENSE_RANK():并列排序,不跳过重复序号——1、1、2 

(4)前后函数:lag(expr,n),lead(expr,n)

用途:返回位于当前行的前n行( LAG(expr,n) )或后n⾏ ( LEAD(expr,n) )的expr的值

应用场景:查询前1名同学的成绩和当前同学成绩的差值

(5)头尾函数:FIRST_VALUE(expr),LAST_VALUE(expr)

⽤途:返回第⼀个( FIRST_VALUE(expr) )或最后⼀个( LAST_VALUE(expr) )expr的值

应用场景:截⽌到当前成绩,按照⽇期排序查询第1个和最后1个同学的分数

4、说一下SQL里面的like的用法

like:模糊查询,'-'匹配单个字符,'%'匹配多个字符

用处:LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式

5、SQL语句求单日留存及一个月的每日留存

/*1.统计每个用户首次访问的日期;2.按用户首次访问的日期分组,统计每个日期的单日留存用户数和30日留存用户数及当前日期的新增用户数;   3.单日留存率=单日留存用户数/当前日期下的新增用户数,30日留存率=30留存用户数/当前日期下的新增用户数*/
with t as 
(select user_id, min(log_date) as first_date 
from user_log) 
select first_date '日期', count(distinct user_id) '新增用户数', round(count(distinct if(datediff(log_date, first_date )=1, user_id, null))/count(distinct user_id), 2) '单日留存率',  round(count(distinct if(datediff(log_date, first_date)=29,user_id, null))/count(distinct user_id), 2) '30日留存率'  
from
(     select l.user_id, l.log_date, t.first_date from user_log l left join t on l.user_id=t.user_id 
) a 
group by first_date; 

 6、sql如何进行优化

        ①用group by代替distinct 去重

        ②关联之前先用where过滤

        ③建立合适的索引

        ④少使用like

        ⑤用临时表with as

        ⑥如果是并集,多使用union all(不去重)

        ⑦在Oracle中可以使用decode代替case when

7、是否会SQL、Python、R等分析工具,分别有什么用?

引申:数据分析师通常会使用EXCEL、SQL、Python和R进行数据处理及数据分析的工作

  • EXCEL:EXCEL用于小样本量中基本的数据处理操作。
  • SQL:从数据库中取数操作,做一些简单的数据处理工作,通过表连接、嵌套查询等动作完成最终的数据统计工作。SQL基本上可以完成大部分的数据分析工作,对当前公司运营的成效进行数据呈现及分析。
  • Python、R:Python和R则属于更高阶的分析工作,可以借助多种多样的工具库,可以通过数据建模,可用于有监督或无监督模型的训练,解决分类或预测问题

8、说一下count()和count(distinct)用法

  • count(column_name):返回非NULL值的数量;
  • count(*):返回总行数,NULL也计算进去 
  • count(distinct):是去重字段后,统计非NULL的值

9、SQL掌握运用的程度?学过sql吗?

①sql 的定义、类别

Structured Query Language(结构化查询语句)。主要包括五类语言:查询语言DQL,操作语言DML,定义语言DDL,事务控制TCL,数据控制语言DCL。

  • 数据查询语言 DQL基本结构:是由SELECT子句,FROM子句,WHERE 子句组成的查询块,简称DQL,Data Query Language。**代表关键字为select**。
  • 数据库操作语言 DML:可以实现对数据库的基本操作。代表关键字为insert、delete 、update。
  • 数据定义语言DDL:用来创建数据库中的各种对象,创建、删除、修改表的结构,比如表、视图、索引、同义词、聚簇等,简称DDL,Data Denifition Language。代表关键字为create、drop、alter。(和DML相比,DML是修改数据库表中的**数据**,而 DDL 是修改数据中表的**结构**)。
  • 事务控制语言 TCL:经常被用于快速原型开发、脚本编程、GUI和测试等方面。**代表关键字为commit、rollback。** 
  • 数据控制语言 DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。**代表关键字为grant、revoke。** 

(2)sql 的基本语法上衍生出的其它知识点: 

  • 嵌套查询:WHERE筛选条件中使用嵌套查询,将(SELECT-FROM-WHERE)的查询语句作为子查询嵌套进去; 
  • 组合查询:使用UNION/UNION ALL对多个查询结果进行组合,其中UNION将对结果进行去重; 
  • 表连接:表连接中根据使用场景选择INEER/LEFT/RIGHT/FULL JOIN; 
  • 聚合函数:使用MAX/MIN/SUM/AVG/COUNT对查询数据进行聚合; 
  • 窗口函数:多查询数据排序或多样性聚合,xxx over(partition by ... order by ...)
http://www.xdnf.cn/news/1333.html

相关文章:

  • 代码随想录算法训练营第二十天
  • 关于C语言的模拟物理模型
  • vue3 el-dialog新增弹窗,不希望一进去就校验名称没有填写
  • SQL刷题记录贴
  • Oracle测试题目及笔记(单选)
  • 赛灵思 XCVU3P‑2FFVC1517I XilinxFPGA Virtex UltraScale+
  • AI在市场营销分析中的核心应用及价值,分场景详细说明
  • 【创新实训个人博客】前端实现
  • 【运维学习】lvs + keepalived + 主从dns 项目搭建
  • Valgrind的使用复习
  • 更换 CentOS 7.9 的系统源
  • 【软考-系统架构设计师】ATAM方法及效用树
  • 【python】pyCharm常用快捷键使用-(2)
  • C++入门基础:命名空间,缺省参数,函数重载,输入输出
  • blender 录课键位显示插件(图文傻瓜式安装)
  • .net core 项目快速接入Coze智能体-开箱即用-全局说明
  • 数据结构之BFS广度优先算法(腐烂的苹果)
  • ARINC818-1协议
  • visual Studio+Qt插件检查内存泄漏
  • Azure 私有端点和存储帐户用例
  • 基于springboot医药连锁店管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【论文精读】COLMAP-Free 3D Gaussian Splatting
  • vue入门:路由 router
  • [GESP202409 二级] 小杨的 N 字矩阵 题解
  • 《如何用 Function 实现动态配置驱动的处理器注册机制?》
  • Ubuntu多用户VNC远程桌面环境搭建:从零开始的完整指南
  • 多路由器通过三层交换机互相通讯(单臂路由+静态路由+默认路由版),通过三层交换机让pc端相互通讯
  • C++之类模板
  • 定制化突围:遨游防爆手机的差异化竞争策略
  • 实战|使用环信Flutter SDK构建鸿蒙HarmonyOS应用及推送配置