mysql练习记录

查询基础

1.distinct:主要用于去重
2.order by:主要用于排序,默认是升序,desc降序
3.limit,offset:配合order by使用,limit表示截取多长,offset表示从哪里开始截,比如limit 4 offset 2,表示从第三个开始截取,截取4个
4.round(num,2)表示将num保留小数点后两位
5.ifnull(num,0)如果num是空,表示为0

SET运算符

mysql练习记录_第1张图片

一些经典问题

1.行转列问题
mysql练习记录_第2张图片
2.判断的写法
mysql练习记录_第3张图片
3.比较日期的值使用DATEDIFF
mysql练习记录_第4张图片
4.mysql中如何排名
举例:

select  a.s_id,a.c_id,
		@i:=@i+1 as i保留排名(依次排名,不考虑并列),
		@k:=(case when @score=a.s_score then @k else @i end) 
		as rank不保留排名(存在并列),
		@score:=a.s_score as score
		from (select s_id,c_id,s_score from score 
		      GROUP BY s_id,c_id,s_score ORDER BY s_score desc)a,
             (select @k:=0,@i:=0,@score:=0)s

5.oracle数据库排名
举例:

select
    s_id 
   ,score
   ,rank() over(order by score desc) rank               --按照成绩排名,纯排名
   ,dense_rank() over(order by score desc) dense_rank   --按照成绩排名,相同成绩排名一致
   ,row_number() over(order by score desc) row_number   --按照成绩依次排名
   ,ntile(3) over (order by score desc) group_s         --按照分数划分成绩梯队
from s_score;

结果:
mysql练习记录_第5张图片
6.mysql日期处理

select s_birth,(DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(s_birth,'%Y') - 
				(case when DATE_FORMAT(NOW(),'%m%d')>DATE_FORMAT(s_birth,'%m%d') then 0 else 1 end)) as age
		from student;

DATE_FORMAT(NOW(),’%Y’),取出年份
DATE_FORMAT(NOW(),’%m%d’),取出月份和日期
WEEK(DATE_FORMAT(NOW(),’%Y%m%d’)),计算第几周
MONTH(DATE_FORMAT(NOW(),’%Y%m%d’)),计算第几个月

你可能感兴趣的:(sql)