SQL之常用函数

本文详细介绍了数据库查询中的窗口函数,包括静态窗口的排名与分组函数,以及动态窗口的聚合、取值、滑动函数,展示了如何在SQL中实现排名、分组计算、移动平均等操作。同时,讲解了正则表达式的LIKE和REGEXP匹配方法,以及字符串函数如SUBSTRING_INDEX、GROUP_CONCAT和CONCAT_WS的使用。通过实例演示,帮助读者掌握这些高级查询技巧。

一、窗口函数

窗口函数,可以对数据库数据进行实时分析处理:

  • 同时具有分组(partition by)和排序(order by)的功能
  • 不减少原表的行数,所以经常用来在每组内排名
  • 窗口函数原则上只能写在select子句中

在这里插入图片描述

语法

<窗口函数> over (partition by <用于分组的列名>
                order by <用于排序的列名>)

<窗口函数>的位置,可以放以下两种函数:

静态窗口函数

  • 排名函数,如rank,dense_rank,row_number等
  • 分组函数,如ntitle

动态窗口函数

  • 聚合函数,如sum,avg,count,max,min等
  • 取值函数,如first_value,last_value,nth_value等
  • 滑动函数,如lead,lag等

1.静态窗口函数

(1)排名函数

【每个班级内按成绩排名】:

  • rank():并列跳跃排名
  • dense_rank():并列连续排名
  • row_number():连续排名
    在这里插入图片描述
SELECT *,
	RANK() OVER (PARTITION BY 班级 ORDER BY 成绩 DESC) AS ranking,
	DENSE_RANK() OVER (PARTITION BY 班级 ORDER BY 成绩 DESC) AS dense_rank,
	ROW_NUMBER() OVER (PARTITION BY 班级 ORDER BY 成绩 DESC) AS row_num
FROM 班级表

得到结果:

在这里插入图片描述

(2)分组函数

[ntitle()函数]:

NTITLE(4):通过c_id分区后,再将这区域分成4组

SELECT *,
	NTITLE(4) OVER(PARTITION BY c_id)
FROM sc

在这里插入图片描述
1-2行属于第一组,3-4行属于第二组,5行属于第三组,6行属于第四组

2.动态窗口函数

(1)聚合函数

  • sum():求和
  • avg():求平均
  • percent_rank():累计百分比
  • cume_dist():累计分布值

avg()函数

over()什么都不加,对整个数据的成绩求平均,窗口数据集是整个数据集

SELECT *, 
	AVG(score) OVER() 
FROM sc

在这里插入图片描述

over()只加排序的参数,按成绩升序排列后对整个数据集成绩求移动平均

SELECT *, 
	AVG(score
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值