limit n # 表示取n条数据
limit n,1 # 表示取第n+1条数据,即从n开始往后数1条,不包含n
limit n,m # 表示取从n开始数往后m条数据,不包含n,即(n+1,n+m)
rank() 连续跳跃(重复的数表示排名一致,如1,1,2,2,3,3,3…)
dense_rank() 连续不跳跃,如1,1,2,3,3,4,4,4…
row_number() 相同的值,按照连续数字排名,如1,2,3,4,5,6
用在分组排序中的写法就是:
rank()/dense_rank()/row_number() over(partition by … order by …)
select * from (
select *,rank(A) over(partition by ... order by ...) as Ar
) t where t.Ar>3
扩展:找分组中的每组的第N条数据,可以用row_number或者其他不同的排序函数,如:
select * from (
select *,row_number() over(partition by A order by B) as C from table1
) T where T.C = N
length(column)
select * from table where length(A)>15
前提:查询必须是等值连接,连接中的列必须有相同的名称和数据类型,下列两个查询语句是一样的
select * from t1 join t2 on t1.A = t2.A
select * from t1 join t2 using(A)
用法:Date_add(字段,interval ? second/minute/hour/day/week/month/quarter/year)
select date_add(startdate,interval 7 day) from table1
用法:if(表达式,值1,值2),当表达式为True时取值1,否则为值2
字段是否为空的表达式:A is null
select concat(round(A,2),'%') from table1
用法:div()函数,整除:div(A,2);mod()函数,取余,mod(A,2);
用法:date_format(A,‘%Y.%m’)
从日期中取出年:year(A)
从日期中取出月:month(A)
datediff(datepart,startdate,enddate)
判断筛选条件,不存在就是空
用法:isnull((select * from table),null)没有记录就用null
可以用于求累计数值
sum(A) over(order by A desc/asc)
with t as (__________) # 括号括起来的部分是select语句
用于合并两个或者多个select语句的结果集合,类似与pandas中concat/append函数
select A from t1 union select A from t2
rows between unbounded predeeding and unbounded following # 当前行前面所有行和后面所有行
rows between n preceeding and n following # 前n行+后n行+当前行
rows between n preceeding and current row # 前n行和当前行
sum(A) over(partition by B order by C rows between current row and 6 following)
省略号部分类似rows,但表示的是列值
sum(A) range between 100 preceeding and 200 following # 表示如果当前close的值为200,那么就会对close值落在100-400之间的行进行累加
substring()函数:substring(A,start,length) start指的是第start个字符(从1开始),length指获取长度为length的字符串
left(A,length) :从左边开始获取字段A长度为length的字符串
right(A,length):从右边开始获取字段A长度为length的字符串
字段包含某字符串:A like ‘XXX%'(A包含XXX开头,"%XXX"包含XXX结尾,“%XXX%”中间包含XXX)
locate()函数:locate(“XXX”,A),返回数字,A包含XXX的次数
substring_index(A,‘X’,int):A表示字段,‘X’表示分隔符,int表示第几个分隔符后面的所有字符串(记录会拼接)
将多条记录拼接成一条记录,且内部允许排序
group_concat(distinct A order by A separator ',') # 用,拼接
字段名 regexp “^…$”
^表示字符的开始
$表示字符的结束
[a-z]表示a-z之间的一个小写字母
[A-Z]表示A-Z之间的一个大写字母
[0-9]表示0-9之间的一个数字
. 表示中间有1个字符
*表示中间有多个字符
select * from Users
where mail regexp "^[a-zA-Z][a-zA-Z0-9\.\_/-]*@leetcode\\.com$"
update XXX set XXX=(
case when XXX="A" then "B" #当XXX为A时,修改XXX属性为B,否则修改为C
else "C"
end
)