数据分析常见面试问题----数据库

本文详细探讨了SQL面试中常见的问题,包括如何使用replace函数统计字段出现次数,Union与Join的区别,SQL窗口函数的应用,以及SQL优化策略,如解决慢SQL的方法、SQL执行顺序、索引的优缺点等。还提到了数据库如MySQL在面对大数据量时的存储压力解决方案,如分库分表。最后,讨论了亿级数据表的设计和join优化技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 ##All_String表示完整字符串,Target_String表示待统计的目标字段

select ( length('All_String')- length(replace('All_String', 'Target_String','')) )/length('Target_String') as cnt from table

答案解析: 字符串的总长度减去去掉目标字段的字符串长度,就得到了目标字段出现的总长度,除以目标字段长度就得到目标字段出现次数。

SQL中提供了获取字符串长度的函数length( )以及从字符串里删除字符的函数replace( )。 ength(replace('All_String','Target_String','')) 将字符串中目标字段替换为空然后再计算替换后的字符串长度;

2. Union和Join的区别?

UNION是两张表进行上下拼接,产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集,分为UNION和UNION ALL两种方法;

JOIN 是两张表进行左右连接,条件匹配的记录将合并产生一个记录集,有LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN等多种方法。 

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

窗口函数的基本用法: over关键字用来指定函数执⾏的窗⼝范围,若后⾯括号中什么都不写,则意味着窗口包含满足WHERE条件的所有行,窗口函数基于所有行进行计算;如果不为空,则⽀持以下4中语法来设置窗⼝。  
①window_name:给窗口指定⼀个别名。如果SQL中涉及的窗口较多,采用别名可以看起来更清晰易读 
 ②partition by子句:窗口按照哪些字段进⾏分组,窗⼝函数在不同的分组上分别执⾏
③order by子句:按照哪些字段进⾏排序,窗⼝函数将按照排序后的记录顺序进⾏编号  
④frame子句:frame是当前分区的⼀个子集,子句⽤来定义子集的规则,通常⽤来作为滑动窗⼝使⽤ 

聚合函数可以⽤于窗⼝函数。 原因就在于窗⼝函数的执⾏顺序(逻辑上的)是在FROM,JOIN,WHERE, GROUP BY,HAVING之后,在ORDER BY,LIMIT,SELECT DISTINCT之前。它执⾏时GROUP BY的聚合过程已经完成了,所以不会再产⽣数据聚合。 注:窗口函数是在where之后执行的,所以如果where子句需要用窗口函数作为条件,需要多⼀层查询,在子查询外面进行。


 4. SQL语句求单日留存及一个月的每日留存?

 5. 针对慢SQL怎么办? SQL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值