MySQL8.0聚合函数+over()函数_mysql 8 over 相同的值-程序员宅基地

技术标签: MySQL  mysql  数据库  

1、数据表内容为:
在这里插入图片描述

CREATE TABLE chapter11 (
	shopname VARCHAR(255) NULL,
	sales VARCHAR(255) NULL,
	sale_date VARCHAR(255) NULL
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci;


INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('A', '1', '2020/1/1');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('B', '3', '2020/1/1');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('C', '5', '2020/1/1');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('A', '7', '2020/1/2');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('B', '9', '2020/1/2');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('C', '2', '2020/1/2');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('A', '4', '2020/1/3');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('B', '6', '2020/1/3');
INSERT INTO chapter11 (shopname, sales, sale_date) VALUES('C', '8', '2020/1/3');

1、求出总平均值:

-- 从demo.chapter11表中选择数据  
select  
    shopname,          -- 选取shopname字段  
    sales,              -- 选取sales字段  
    sale_date,          -- 选取sale_date字段  
    -- 使用子查询计算demo.chapter11表的平均销售额  
    (select avg(sales) from demo.chapter11) as avgsales,  
    -- 固定值'测试数据'作为test_col列  
    '测试数据' as test_col    
from  
    demo.chapter11;      -- 从demo.chapter11表中选择数据
    

由于sales加起来是45,除以这9列,所有平均值为为5!
在这里插入图片描述上面的代码虽然可以实现我们的需求,但是略显烦琐,我们可以使用窗口函数的 over0函数轻松实现上面的需求,只需要在聚合函数后面加一个 over函数即可具体实现代码如下:

over()函数

select  
    shopname,  
    sales,  
    sale_date,   
    -- 使用窗口函数计算每个记录的平均销售额  
    avg(sales) over() as avgsales  
from  
    demo.chapter11;

在这里插入图片描述

2、求出每个商品的总数,并且求出每个商品的销售平均值

SELECT
	shopname,
	sale_date,
	sum( sales ),
	avg( sales ) 
FROM
	demo.chapter11 a 
GROUP BY
	a.shopname

在这里插入图片描述

3、求出每个商品的销售平均值

-- 从demo.chapter11表中选择shopname、sales和sale_date字段的值  
SELECT  
 a.shopname,              -- 选取demo.chapter11表中的shopname字段  
 a.sales,                  -- 选取demo.chapter11表中的sales字段  
 a.sale_date,               -- 选取demo.chapter11表中的sale_date字段  
 avg_table.avg_sales        -- 选取avg_table表中的avg_sales字段  
FROM  
 demo.chapter11 a            -- 从demo.chapter11表中选择数据,并给这个表起个别名为a  
LEFT JOIN                     -- 使用左连接将avg_table表连接到demo.chapter11表上  
 (SELECT                       -- 子查询开始  
 shopname,                     -- 选取shopname字段  
 avg(sales) AS avg_sales       -- 计算每个分组的平均销售额,并命名为avg_sales  
 FROM  
 demo.chapter11 b              -- 从demo.chapter11表中选择数据,并给这个表起个别名为b  
 GROUP BY                       -- 按shopname字段分组  
 b.shopname) avg_table         -- 将结果命名为avg_table表  
ON                             -- 连接条件是两表之间的shopname字段相等  
 a.shopname = avg_table.shopname;   -- 将a表的shopname字段与avg_table表的shopname字段进行匹配

在这里插入图片描述
上面的写法太过于麻烦:下面用partition by

partition by

partition by的作用与group by类似,在over0函数中使用partition by 来指明要按照哪列进行分组,然后聚合函数就会在分好的组内进行聚合运算,此处按照shopname列进行分组,具体实现代码如下:

以下是详细的中文注释:


-- 计算每个shopname分组的平均销售额  
SELECT  
 a.shopname,              -- 选取demo.chapter11表中的shopname字段  
 a.sales,                  -- 选取demo.chapter11表中的sales字段  
 a.sale_date,               -- 选取demo.chapter11表中的sale_date字段  
 avg(a.sales) over (partition by a.shopname) as avg_sales  -- 使用窗口函数计算每个shopname分组的平均销售额  
FROM  
 demo.chapter11 a ;           -- 从demo.chapter11表中选择数据,并给这个表起个别名为a



这个SQL查询的目的是从demo.chapter11表中选取shopname、sales和sale_date字段的值,并使用窗口函数计算每个分组的平均销售额。
在这个查询中,使用了窗口函数avg(a.sales) over (partition by a.shopname)
来计算每个shopname分组的平均销售额。
窗口函数允许在查询结果的不同部分(窗口)上执行聚合操作,
而不需要对整个结果集进行分组。在这个例子中,窗口函数根据shopname字段对数据进行分区,
并计算每个分组的平均销售额。结果将命名为avg_sales。

4、每个店铺每天的销量与该店铺自己所有销量的平均值之间的比较

order by

SELECT  
 a.shopname,              -- 选取demo.chapter11表中的shopname字段  
 a.sales,                  -- 选取demo.chapter11表中的sales字段  
 a.sale_date,               -- 选取demo.chapter11表中的sale_date字段  
 avg(a.sales) over (partition by a.shopname ORDER BY a.sale_date) as avg_sales  -- 使用窗口函数计算每个shopname分组的平均销售额  
FROM  
 demo.chapter11 a ;
 

店铺A在202011日的平均值就是它本身,
在12日的平均值是11日与12日两天的平均值,
在13日的平均值是11日、12日、13日二天的平均值。
前面讲的over()、partition byorder by 
使用的聚合函数都是求平均值运算,当然也可以使用其他聚合函数,

在这里插入图片描述
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47139678/article/details/135159378

智能推荐

len(ab计算机)的函数值,函数和表达式练习题-程序员宅基地

文章浏览阅读2.9k次。D、STR(YEAR(DATE())29、在内存中清除内存变量的命令是()A、releaseB、deleteC、eraseD、destroy30、以下关于“查询”的描述正确的是()A、查询保存在项目文件中B、查询保存在数据库文件中C、查询保存在表文件中D、查询保存在查询文件中31、如果有定义LOCAL data,data的初值是()A、整数0B、不定值C、逻辑真D、逻辑假注意"[信..._执行如下命令序列后,最后一条命令的显示结果是(  d)。 dimension m(2,2) m(1,1)=

02、江苏专转本(专业课笔记)第二章、计算机的组成原理_集中式控制系统从计算机的()到存储器、外部设备、过程i/o等所有部分都是通过计算-程序员宅基地

文章浏览阅读2.3k次,点赞3次,收藏23次。文章目录一、计算机的组成原理1、认识计算机1.1、认识1-4代计算机1.2、计算机应用的四种模式1.3、计算机特性以及未来发展2、计算机组成2.1、计算机逻辑组成与现代化硬件组成2.2、各种设备介绍2.3、计算机分类二、CPU的结构与原理1、原理介绍1.1、冯诺依曼计算机结构与原理1.2、存储程序控制原理2、了解CPU2.1、CPU任务介绍2.2、CPU结构与任务2.3、指令与指令系统2.4、CPU性能指标及影响性能因素2.5、提高CPU性能措施3、扩展Intel公司CPU发展史怎么认识双核、四核处理器?三_集中式控制系统从计算机的()到存储器、外部设备、过程i/o等所有部分都是通过计算

超简单java环境配置(2021版)_java21配置环境教程-程序员宅基地

文章浏览阅读6.7k次,点赞10次,收藏10次。①找到 高级系统设置②点击环境变量在系统环境变量 区块中点击新建按钮配置1:添加下图配置变量名为:JAVA_HOME变量值为:jdk的安装路径 我的为:D:\Program Files\Java\jdk1.8.0_152配置2:继续新建系统环境变量(和我的保持一致)系统名:CLASSPATH变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar配置3:双击系统环境中的Path在弹出的窗口中点击新建 然后加入: %JAVA_HOME%\_java21配置环境教程

XAML四大原则及五种常见布局_简述声明一个xaml元素必须遵循的4大原则-程序员宅基地

文章浏览阅读1.7k次。xaml介绍xaml就是微软为构建应用程序界面而创建的一种描述性语言一种编程语言xaml里面的控件相当于类,控件的属性相当于封装的对象XAML必须遵循的4大原则:XAML是大小写区分的,元素和属性的名称必须严格区分大小写。所有的属性值,无论它是什么数据类型,都必须包含在双引号中;所有的元素都必须是封闭的;如<Button …/> …最终的XAML文件也必须是合适的XML文档。**常用的五种布局:**Canvas Grid StackPanel DockPanel W_简述声明一个xaml元素必须遵循的4大原则

pycharm安装教程,超详细-程序员宅基地

文章浏览阅读10w+次,点赞1.5k次,收藏8.2k次。在安装pycharm之前,确保你的电脑配置好了python,没有下载安装的可以去看我的文章—>>>python安装详细教程pycharm windows版本下载地址:https://www.jetbrains.com/pycharm/download/#section=windows下载社区版本(日常学习使用够用了),专业版是收费的哦(功能更强大)下载完后打开安装程序,点击next选择一个路径然后next把这些选项都勾选上。点击Install安装完后点击Finish_pycharm安装教程

收藏 10款内网穿透工具_虚拟机内网穿透的软件-程序员宅基地

文章浏览阅读140次。首先,我们生活中的网络从应用上可以分为内网和外网;内网就是你自己的网络环境,就你自己能访问,比如你本地测试进行的localhost;外网就不言而喻了,你看网页,视频等这些网址都是外网。那么什么又是内网穿透呢?简单的说就是通过访问一个外网地址,然后穿透到你的内网地址。内网穿透又叫端口映射,用一句最简单的话来讲就是:将你的计算机所连接的私有网络映射到公网上,别人通过你给的域名或ip即可访问你本地的服务。_虚拟机内网穿透的软件

随便推点

UE4 材质学习笔记_ue4 材质local offset-程序员宅基地

文章浏览阅读553次。常用节点Lerp在A和B之间根据Alpha的值进行插值运算FlipBook制作类似幻动片一样的,根据UV坐标一张一张进行播放通过控制他的行数列数动画的相位来控制UV的切换TwoSidedSign常量表达式用翻转法线,表示双面材质的正反面Saturate用于把输入的值钳制的0和1之间Noise实用表达式用于生成一个程序化的噪波,这个可以进行控制,通过设置参数VertexNormalWS坐标表达式这节点输出世界空间下的顶点的法线LocalPositio_ue4 材质local offset

postman实现传递session给后端_postman session设置session数据-程序员宅基地

文章浏览阅读6.9k次。https://blog.csdn.net/m0_37166734/article/details/80765326用过postman的人都知道,postman可以模拟各种http请求,对于前后端分离的开发特别有好处。开发中遇到这样的问题,登录信息保存在session中,拦截器会判断session中的值,为空则不允许访问,但我们在postman中模拟登录后,想进行下一步操作,..._postman session设置session数据

借助Flex实现SysY词法分析-程序员宅基地

文章浏览阅读2.6k次,点赞12次,收藏38次。词法分析(lexical analysis)是编译器的第一阶段,主要是将代码的字符序列转换为token的过程。简单地来说,就是对代码进行切块的一个过程,并将每一块添加上其所属的类别标签。比如说int asd=897;,其词法分析的结果即为int :< TYPE , ‘int’ >asd :< ID , ‘ast’ >= ..._sysy词法分析

【Hyperledger Fabric 2.2】在已有组织中添加peer节点_fabric 只能合约 添加节点-程序员宅基地

文章浏览阅读395次。hyperledger fabric 2.2 添加节点_fabric 只能合约 添加节点

[转] 字符集编码(GBK,BIG5,UNICODE)与C++的string/wstring-程序员宅基地

文章浏览阅读248次。 GBK,BIG5等字符集编码范围的具体说明 一 预备知识1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。2,字符集:字符集是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、..._big5转unicode 转码表

A3 STM32_HAL库函数 之 ADC通用驱动器 -- B -- 所有函数的介绍及使用-程序员宅基地

文章浏览阅读575次,点赞11次,收藏23次。以上就是A3 STM32_HAL库函数 之 ADC通用驱动器 – B – 所有函数的介绍及使用的内容。有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。创作不容,如果文档对您有帮助,记得给个赞。

推荐文章

热门文章

相关标签