2021-07-12mysql窗口函数,聚合函数

系列文章目录


mysql窗口函数,聚合函数


前言

mysql窗口函数,聚合函数


提示:以下是本篇文章正文内容,下面案例可供参考

2,聚合函数

窗口函数分为:

  1. 聚合函数
  2. 专用函数

聚合函数

sum,min,max,avg,count,

专用函数

rank,dense_rank,row_number
  1. rank函数

计算排序时,如果存在相同位次的记录,则会跳过之后的位次。

例如:有3条记录并列第一时:1,1,1,4

  1. dense_rank函数

不会跳过之后的为此:1,1,1,2

  1. row_number函数

赋予唯一的连续位次:1,2,3,4

1,min()

拿到字段的最小值

语法:

select min(字段)

示例:

1,去除重复记录,只保留最小的记录

delete from titles_test
where id not in(
select * from (
select min(id)
    from titles_test
    group by emp_no
)as a
)

注意点:mysql中不允许在子查询的同时删除表数据(不能一边查,一边把表给删了)

2,replace()

replace函数中包含三个参数,第一个参数是某字段的名称,第二个参数是该字段的需要被修改的值,第三个参数为该字段修改后的值

示例:

update titles_test set
emp_no = replace(emp_no,10001,10005)
where id = 5

2,concat

字段连接

基本语法:

concat(column1,"连接字符",column2)

实例:

last_name和first_name,中间用'

update salaries as s join emp_bonus as e on s.emp_no = e.emp_no
set salary = salary*1.1
where to_date = '9999-01-01'

3,Trim

去空格

基本语法:

RTrim():去除字符串右端空格
LTrim():去除字符串左端空格
Trim():去除字符串两端的空格
Trim(column)

3,length,char_length

统计字符串或者字段长度

基本语法:

length("字符串")
length(columb_name)
  1. utf-8编码下,一个汉字算三个字符,数字和字母算一个字符
  2. 其他编码下,一个汉字算一个字符,数字和字母算一个字符
char_length("字符串")
char_length(column_name)
  1. 一个多字节符(例如,汉字)算作一个单字符
  2. 汉字,字母,数字都算是一个字符
  3. 任何编码下,多字节字符都算是一个字符

实例:

统计字符串:10,A,B中,出现的次数

select (length("10,A,B")-length(replace("10,A,B",",","")))
as cnt

4,right,left,substr,substring

  1. right(str,n),从右开始分割,截取n位
  2. left(str,n),从左开始分割,截取n位
  3. substr(str,pos),从哪一位(pos)开始
  4. substr(str,pos,n),从哪一位(pos)开始,截取n位

实例:

取后几位排序

select first_name
from employees
order by  substr(first_name,-2,2)
select first_name
from employees
order by  right(first_name,2)

5,group_concat

group_concat() 函数将group by 产生的分组中的值连接起来,返回一个字符串结果。

group_concat([distinct]要连接的字段,[order by 排序字段 asc/desc][separator '分隔符'])
distinct去重
order by 排序
separator 默认逗号

实例:

select dept_no,group_concat(emp_no) as employees
from dept_emp group by dept_no

6,sum

sum求和

实例:

select (sum(salary)-max(salary)-min(salary))/(count(salary)-2) as avg_salary
from salaries
where to_date = '9999-01-01'

sum()over():

sum()over(order by column_name):求累计和/汇总 语句结构

实例:

求截止到指定日期前的员工工资总和

select s.emp_no,s.salary,(sum(s.salary) over (order by s.emp_no))as running_total
from salaries as s 
where s.to_date = '9999-01-01'
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值