sql错题知识点汇总
1、题干不去重表示:只要满足一个条件就被筛选出来。
这里的坑是使用or,因为or自带去重,而union等价于or,但union all 可以不去重。
2、求次日留存率:lead()over() 记得distinct
求连续天数:dense_rank()over()
3、字符串截取:substring_index(str,delim,count) str:要处理的字符串 delim:分隔符 count:计数
例子:str=www.wikibt.com例子:str=www.wikibt.com
substring_index(str,'.',1) 结果是:www
substring_index(str,'.',2) 结果是:www.wikibt
如果count是正数,那么就是从左往右数,第N个分隔符的左边的所有内容
如果count是负数,那么就是从右往左数,第N个分隔符的右边的所有内容
substring_index(str,'.',-2) 结果为:wikibt.com
4、求某一指标最高/最低用户:不一定只有max、min,可以考虑开窗排序为rk,再where rk=1
row_number()over():为每一行分配一个唯一的数字,即使它们的值相同
rank()over():为具有相同值的行分配相同的排名,但会跳过下一个排名
dense_rank()over:为具有相同值的行分配相同的排名,且不会跳过下一个排名
5、count(null)输出为0,count(0)输出为1
sum(null)输出为None,sum(0)输出为0
6、字符串的截取:substring(字符串,起始位置,截取字符数)
字符串的拼接:concat(字符串1,字符串2,字符串3,...)
字母大写:upper(字符串)