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子句需要用窗口函数作为条件,需要多⼀层查询,在子查询外面进行。