mysql窗口函数,聚合函数
mysql窗口函数,聚合函数
提示:以下是本篇文章正文内容,下面案例可供参考
窗口函数分为:
聚合函数
sum,min,max,avg,count,
专用函数
rank,dense_rank,row_number
计算排序时,如果存在相同位次的记录,则会跳过之后的位次。
例如:有3条记录并列第一时:1,1,1,4
不会跳过之后的为此:1,1,1,2
赋予唯一的连续位次:1,2,3,4
拿到字段的最小值
语法:
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
字段连接
基本语法:
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'
去空格
基本语法:
RTrim():去除字符串右端空格
LTrim():去除字符串左端空格
Trim():去除字符串两端的空格
Trim(column)
统计字符串或者字段长度
基本语法:
length("字符串")
length(columb_name)
char_length("字符串")
char_length(column_name)
实例:
统计字符串:10,A,B中,
出现的次数
select (length("10,A,B")-length(replace("10,A,B",",","")))
as cnt
实例:
取后几位排序
select first_name
from employees
order by substr(first_name,-2,2)
select first_name
from employees
order by right(first_name,2)
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
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'