SQL学习()

  本篇文章为你整理了SQL学习()的详细内容,包含有 SQL学习,希望能帮助你了解 SQL学习。

  1、ROW_NUMBER() OVER()函数

  语法格式:row_number() over(partition by 分组列 order by 排序列 desc)

  

注意;在使用 row_number() over()函数时候,over()里头的分组以及排序的执行晚于 where 、group by、 order by 的执行。

 

  

 

   ①表数据

  

 1 create table TEST_ROW_NUMBER_OVER(

 

   2 id varchar(10) not null,

   3 name varchar(10) null,

   4 age varchar(10) null,

   5 salary int null

   6 );

   7 select * from TEST_ROW_NUMBER_OVER t;

   9 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,a,10,8000);

  10 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(1,a2,11,6500);

  11 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,b,12,13000);

  12 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(2,b2,13,4500);

  13 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,c,14,3000);

  14 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(3,c2,15,20000);

  15 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(4,d,16,30000);

  16 insert into TEST_ROW_NUMBER_OVER(id,name,age,salary) values(5,d2,17,1800);

 

  View Code

  

   ②进行一次排序,无分组

  

格式:row_number() over(order by 字段 desc)

 

  


select id,name,age,salary,row_number() over(order by salary desc) rn from TEST_ROW_NUMBER_OVER 

 

   ③根据id分组排序

  

格式 row_number()over(partition by 字段1 order by 字段2 desc)

 

  根据字段1进行分组,再根据字段2进行组内排序

 

  


select id,`name`,age,salary,row_number()over(partition by id order by salary desc) rn from TEST_ROW_NUMBER_OVER t;

 

   ④练习题

  有这么一张表student,存在多个相同数据的项,因此请删除no、name、score都不相同的项。

  
 

  第一步使用开窗函数筛选出以no、name、score为分组的项

  

select id,`no`,`name`,score,row_number()over(partition by `no`,`name`,score)as num from student

 

  第二部通过join连接表进行删除多余相同的项

  

delete s from student s join 

 

  (select id,`no`,`name`,score,row_number()over(partition by `no`,`name`,score)as num from student) a
on s.id = a.id where num != 1

 

  执行完delete后在查询整个student表

  2、DATE_ADD()、DATE_SUB函数

  DATE_ADD(date,INTERVAL expr unit) 加

  DATE_SUB(date,INTERVAL expr unit) 减

  

说明;其中 date表示时间字段或者时间类型

 

  interval是固定标志,expr 表示数量,可以为正负,表示加减,unit表示日期类型 可以是yy,ww,dd等分别表示,年,周,天等,

  unit 参数可以是下列值:

  MICROSECOND 微秒;[计量] 一百万分之一秒

  SECOND 秒

  MINUTE 分

  HOUR 小时

  DAY 天

  WEEK 周

  MONTH 月

  QUARTER 三个月

  YEAR 年

  SECOND_MICROSECOND

  MINUTE_MICROSECOND

  MINUTE_SECOND

  HOUR_MICROSECOND

  HOUR_SECOND

  HOUR_MINUTE

  DAY_MICROSECOND

  DAY_SECOND

  DAY_MINUTE

  DAY_HOUR

  YEAR_MONTH

  

 

   具体示例如下:

  

-- 得到当前时间增加1个小时的结果

 

  select date_add(now(),interval 1 hour)

  -- 得到当前时间增加1天的结果

  select date_add(now(),interval 1 day)

  -- 得到当前时间减少72个小时的结果

  select date_add(now(),interval -72 hour)

  -- 还有一些更加高级的用法,比如增加一天一小时一分一秒

  -- 但是如果你不太喜欢这种用法,你仍然可以使用等同于该数值的second来进行加减

  date_add(now(),interval 1 1:1:1 day_second)

 

  

  3、时间函数NOW()和SYSDATE()

  NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间。

   因为NOW()取自mysql的一个变量”TIMESTAMP”,而这个变量在语句开始执行的时候就设定好了,因此在整个语句执行过程中都不会变化。

   执行下面这个例子就明白了:

   SELECT NOW(),SYSDATE(),SLEEP(3),NOW(),SYSDATE()

   先查询了NOW()和SYSDATE(),然后sleep了3秒,再查询NOW()和SYSDATE(),结果如下:

  

  NOW()还有3个同义词,效果跟NOW()一样,而且都有2种形式写法:

  LOCALTIME或LOCALTIME() --- localtime LOCALTIMESTAMP

  LOCALTIMESTAMP() --- localtimestamp CURRENT_TIMESTAMP

  CURRENT_TIMESTAMP() --- current_timestamp

  以上就是SQL学习()的详细内容,想要了解更多 SQL学习的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: