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

系列文章目录


mysql窗口函数,聚合函数

文章目录

  • 系列文章目录
  • 前言
    • 2,聚合函数
      • 1,min()
      • 2,concat
      • 3,Trim
      • 3,length,char_length
      • 4,right,left,substr,substring
      • 5,group_concat
      • 6,sum


前言

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'

你可能感兴趣的:(数据库,mysql,数据库)