MySQL实现常用分析函数

MySQL实现常用分析函数,第1张

分别在 MySQL5.7.25-log 和 8.0.16 环境中实现类似Oracle的分析函数(8.0版本中已支持,直接使用即可)。

一、创建测试数据

二、row_number() over()

三、rank() over()

四、dense_rank() over()

五、lag() over()

六、lead() over()

七、待补充

例1:不分组,全部数据添加序列号,类Oracle 的rownum伪列

例2:先按roomid分组,再按照deviceid,counter排序,类Oracle 的row_number() OVER(PARTITION BY ORDER BY )

例1:不分组,全部数据按 roomid 排序,再添加序号,类Oracle 的rank() OVER(ORDER BY)

例2:先按roomid分组,再按deviceid排序,类Oracle 的rank() OVER(PARTITION BY ORDER BY)

例1:不分组,全部数据按roomid排序,再添加序号,类Oracle 的dense_rank() OVER(ORDER BY)

例2:先按roomid分组,再按deviceid排序,类Oracle 的dense_rank() OVER(PARTITION BY ORDER BY)

例1:不分组,全部数据按roomid,deviceid升序排序,类Oracle 的lag() OVER(ORDER BY)

例2:先按roomid分组,再按roomid,deviceid排序,类Oracle 的lag() OVER(PARTITION BY ORDER BY)

例1:不分组,全部数据按roomid,deviceid,counter升序排序,类Oracle 的lead() OVER(ORDER BY)

例2:先按roomid分组,再按deviceid,counter排序,类Oracle 的lead() OVER(PARTITION BY ORDER BY)

1.select concat(name, money) from account:拼接字段

2.select length(name) from account:查询字节长度(根据编码集utf-8,一个汉字占三个字节)

3.select ifnull(money, 10) from account:如果money为null,显示10

4.select round(money,1) from account:保留一位小数四舍五入

5.select floor(money) from account:向下取整

6.select ceil(money) from account:向上取整

7.select truncate(money, 1) from account:截断(截取一位小数)

8.select mod (10, 3):取余(相当于select 10%3)

9.select upper(name) from account:将名字变成大写

10.select lower(name) from account:将名字变成小写

11.select substring(name, 1) from account:截取名字下标从1开始的所有字段(注意:mysql的下标都是从1开始)

12.select substring(name, 1, 4) from account:截取名字下标从1开始,长度为4的字段

13.select now():返回当前系统的日期和时间

14.select curdate():返回当前系统的日期

15.select curtime():返回当前系统的时间

16.select date_format(now(), '%Y年%m月%d日') as '当前时间':将时间转换成字符串

17.select count(name) from account:计算name的个数(忽略null)

18.select count( ) from account:计算个数(不忽略null,类似:select count(1) from account)

19.select lpad(name, 10, ' '), money from account:指定字段在左边填充到指定长度(rpad:右边填充)

20.select replace(name, 'an', '*'), money from account:替换指定字段

21.select * from user limit 0,5:查询前5条数据(下标0开始,数量:(page - 1) * size, size)

22.select * from boy union select * from girl:两个结果合成一个(会自动去重,不去重用:union all)

1.select sum(money) from account:求和(忽略null,null和任何值相加都为null)

2.select sum(money) from account:求平均数(忽略null)

3.select max(money) from account:求最大值(忽略null)

4.select min(money) from account:求最小值(忽略null)

5.select name, money, if(money is null, '呵呵', '哈哈') 备注 from account:if语句

6.case条件语句

1.create table copy like user:复制user表(只复制表的字段)

2.create table copy select * from user:复制user表(字段数据一起复制)

3.create table copy select username,age from user:复制user表(复制指定的字段,数据一起复制)

4.create table copy select username,age from user where 0:复制user表(复制指定的字段,数据不复制)

5.alter table 表名 add|drop|modify|change column 列名【列类型 约束】:修改表

1.等值连接:select s.studen, t.teacher from study s, teacher t where s.t_id = t.id(求交集部分)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7324406.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存