窗口函数(sample database classicmodels _No.8 )

2024-03-20 00:36

本文主要是介绍窗口函数(sample database classicmodels _No.8 ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

窗口函数(sample database classicmodels _No.8 )

准备工作,可以去下载 classicmodels 数据库具体如下
点击:classicmodels

也可以去 下面我的博客资源下载
https://download.csdn.net/download/tomxjc/88685970

文章目录

  • 窗口函数(sample database classicmodels _No.8 )
  • 什么是窗口函数?
  • 二、实例1
  • 二、实例2
  • 总结


什么是窗口函数?

开窗函数(Window Function)是一种在关系型数据库中执行计算的功能,它能够在查询结果集的子集(窗口)上执行聚合、排序和分析操作,而不会改变原始查询结果的行数。开窗函数通常与聚合函数(如SUM、AVG、COUNT等)结合使用,以便在给定的窗口中对数据进行分析。

开窗函数在SQL标准中得到广泛支持,并且在许多主流的关系型数据库管理系统(如PostgreSQL、MySQL、Oracle、SQL Server等)中都有实现。

开窗函数的语法通常如下:

<窗口函数>(<表达式>) OVER (PARTITION BY <分区键> ORDER BY <排序键> [窗口定义])

其中:

<窗口函数>:要执行的聚合或分析函数,例如SUM、AVG、ROW_NUMBER等。
<表达式>:要对其执行窗口函数的列或表达式。
PARTITION BY:用于将结果集分区的列或表达式。它将数据分成不同的组,在每个组内执行窗口函数。
ORDER BY:对分区中的行进行排序的列或表达式。
[窗口定义]:可选部分,用于定义窗口的边界。包括ROWS、RANGE等窗口类型。
通过使用开窗函数,可以执行一系列分析操作,如计算累积总和、计算移动平均值、计算排名等。这使得在查询结果中执行复杂的分析变得更加简单和高效。

二、实例1

select orderNumber ,
orderLineNumber ,
productCode ,
quantityOrdered*priceEach as sumcost,  
sum(quantityOrdered*priceEach) over (PARTITION BY orderNumber) as totalcost,
row_number() over (PARTITION BY orderNumber order by quantityOrdered*priceEach desc) as cost_order
,concat( round(quantityOrdered*priceEach/sum(quantityOrdered*priceEach) over (PARTITION BY orderNumber) * 100.00,2.0) ,'%') as 'rate%'
FROM    orderdetails join orders USING (orderNumber)
where year(orderDate) in ('2004') and status='Shipped'

知识点:

quantityOrdered*priceEach as sumcost
sum(quantityOrdered*priceEach) over (PARTITION BY orderNumber) as totalcost

quantityOrdered-订单数量
priceEach-订单单价
sumcost就是总价
sum(quantityOrderedpriceEach)就是 单价和数量汇总
PARTITION BY orderNumber 意思是根据 orderNumber 分组
sum(quantityOrdered
priceEach) over (PARTITION BY orderNumber) 这个意思就是根据 orderNumber 分组后汇总订单金额
row_number() 函数 是 其分区内的当前行数
在这里插入图片描述

二、实例2

select orderNumber ,quantityOrdered*priceEach as sumcost, 
PERCENT_RANK() over (PARTITION BY orderNumber order by quantityOrdered*priceEach desc),
CUME_DIST() over (PARTITION BY orderNumber order by quantityOrdered*priceEach desc)
FROM    orderdetails join orders USING (orderNumber)
where year(orderDate) in ('2004') and status='Shipped'

在这里插入图片描述
PERCENT_RANK() over (PARTITION BY orderNumber order by quantityOrdered*priceEach desc)
这个数根据百分比算 出,百分比排名值,并且可以看到第一行永远是 0,表中orderbumber =10217 有 7个子订单,
就是1/(7-1)=0.16666 平分6份,每一份是 0.16666

CUME_DIST() over (PARTITION BY orderNumber order by quantityOrdered*priceEach desc)
这个数根据累计分组后的累计值 ,并不是平分值,1/7=0.1428 然后在累计

总结

mysql 开窗函数可以去这个找到

在这里插入图片描述
窗口函数(Window Function)是一种在SQL中执行计算的特殊函数,它能够在查询结果的子集(窗口)上进行聚合、排序和分析操作,而不改变原始查询结果的行数。窗口函数通常与OVER子句一起使用,以定义要应用窗口函数的数据子集。

窗口函数提供了一种在结果集内执行各种聚合和分析操作的强大机制,而无需对查询进行分组。这意味着您可以在结果集中执行各种计算而无需对整个结果集进行聚合。

窗口函数通常用于以下场景之一:

  • 对分组数据执行聚合操作:与GROUP
    BY子句不同,窗口函数可以对整个结果集进行聚合,而不会减少结果行数。例如,您可以计算每个行的累积总和或平均值。
  • 执行排名和排序操作:您可以使用窗口函数对结果集中的行进行排序,并为每行分配排名或行号。这使得可以轻松地确定数据的顺序和排名。
  • 执行移动平均和累积计算:窗口函数允许您在结果集内执行移动平均、累积和其他类似的计算。这对于趋势分析和预测非常有用。
  • 执行分析函数:您可以使用窗口函数执行各种分析操作,如计算行与前一行之间的差异或百分比变化等。
  • SQL标准中定义了一系列窗口函数,常见的包括SUM、AVG、COUNT、ROW_NUMBER、RANK、DENSE_RANK等。这些函数可以与OVER子句一起使用,以指定窗口的范围和排序方式。

但用的最频繁的一般这4个
函数DENSE_RANK() ,RANK(),ROW_NUMBER(),LAG()

这篇关于窗口函数(sample database classicmodels _No.8 )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/827724

相关文章

Kotlin 作用域函数apply、let、run、with、also使用指南

《Kotlin作用域函数apply、let、run、with、also使用指南》在Kotlin开发中,作用域函数(ScopeFunctions)是一组能让代码更简洁、更函数式的高阶函数,本文将... 目录一、引言:为什么需要作用域函数?二、作用域函China编程数详解1. apply:对象配置的 “流式构建器”最

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

MySQL错误代码2058和2059的解决办法

《MySQL错误代码2058和2059的解决办法》:本文主要介绍MySQL错误代码2058和2059的解决办法,2058和2059的错误码核心都是你用的客户端工具和mysql版本的密码插件不匹配,... 目录1. 前置理解2.报错现象3.解决办法(敲重点!!!)1. php前置理解2058和2059的错误

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是