适用结构相同的表联结成一张大表
内连接:返回两个表共同的行
左连接:以表 1 为基础,匹配表 2 的相同行
右连接:以表 2 为基础,匹配表 1 的相同行
全连接:返回全部数据,可以理解为左连接和右连接的结合
mysql 没有全连接
常用于组内排序,具体写法如下
窗口函数可以用 rank 相关函数或者聚合函数
当前日期+时间(date + time)函数:now()
当前时间戳函数:current_timestamp()
日期或时间转换为字符串 函数:date_format(date,format), time_format(time,format)
lower(str):将字符串参数值转换为全小写字母后返回
upper(str):将字符串参数值转换为全大写字母后返回
concat(str1, str2,...):将多个字符串参数首尾相连后返回
concat_ws(separator,str1,str2,...):将多个字符串参数以给定的分隔符 separator 首尾相连后返回
substr(str,pos):截取从 pos 位置开始到最后的所有 str 字符串
substr(str, pos, len):截取 str 字符串,从 pos 位置开始的 len 个字符
length(str):返回字符串的存储长度
char_length(str):返回字符串中的字符个数
format(X,D,locale):以格式 ‘#,###,###.##’ 格式化数字 X,D 指定小数位数,locale 指定国家语言(默认的 locale 为 en_US)
left(str, len):返回最左边的len长度的子串
right(str, len):返回最右边的len长度的子串
ltrim(str),rtrim(str):去掉字符串的左边或右边的空格
repeat(str, count):将字符串 str 重复 count 次后返回
reverse(str):将字符串 str 反转后返回
通俗易懂的学会:SQL窗口函数
mysql format时间格式化说明
MySQL常用字符串函数
分别在 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)
窗口函数(window functions),也叫分析函数和OLAP函数,MySQL在8.0之后开始支持窗口函数。窗口函数可以用来对数据进行实时分析处理,和group by有类似之处,其区别在于窗口会对每个分组之后的数据按行进行分别 *** 作,而group by一般对分组之后的函数使用聚合函数汇总,做不到对不同的group中的行数据进行分别 *** 作。这就简单介绍几种常见的MySQL窗口函数。下表中列出了几种常见的窗口函数,并对其基本功能进行了描述。接下来我们会以一段示例,来展示MySQL中窗口函数的用途和效果。
假设我们存在一张如下的员工工资表,接下来我们将以这张表对窗口函数的使用方法进行简单的演示。
窗口函数的语法如下,所有的窗口函数均遵循以下语法:
其中 frame_clause 语法如下。
接下来我们将展示一些场景的窗口函数的用法和效果。
示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名
示例: 对每个部门的员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名
示例: 对所有员工按照薪资降序排序,并给出对应的row_number、rank和dense_rank的排名,最终结果按照员工号进行排序输出。
示例: 找出每个部门工资最高的人。
示例: a.将所有员工按照工资递增的顺序分成4组。b.根据员工入职日期升序分成7组。
示例: 获取每个部门,按工资从低到高得累计和。
示例: 获取每个部门得工资累计和。
示例: 获取整个公司的薪资按照薪资递增的累计和。
示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资和。
示例: 每个部门的平均工资。
示例: 获取整个公司的薪资按照薪资递增的前两行和后一行范围内的薪资平均值。
示例: 根据薪资排序,获取CUME_DIST()和PERCENT_RANK()
示例: a. 获取每个人入职前一行的数据,默认值为"2021-01-01"b. 获取每个人入职前两行的数据,不设置默认值c. 获取每个人入职后一行的数据,默认值为"2022-01-01"d. 获取每个人入职后两行的数据,不设置默认值
示例: a. 按照入职日期顺序排序,找出当前每个部门最先入职的人的薪资。b. 按照入职日期顺序排序,找出当前每个部门最后入职的人的薪资。
示例: a.获取截至当前工资第二高的人的工资。b.获取第二个入职的人的工资。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)