SQL聚合函数和窗口函数

news2025/3/6 21:10:37

1.创建表格插入数据

DROP TABLE IF EXISTS 学生;
create table 学生
(
    student_id INT PRIMARY KEY,
    gender TEXT,
    city TEXT,
    a_score FLOAT(2),
    b_score FLOAT(2),
    weight FLOAT(2)
)engine=innodb;

INSERT INTO 学生 VALUES
(001,'female','xiameng',90.6,110.87,50.34),
(002,'male','guangzhou',93.6,116.87,48.6),
(003,NULL,'guangzhou',90.64,107.06,60.34),
(004,'female','guangzhou',80.6,103.87,45.0),
(005,NULL,'xiameng',NULL,98.8,50.34),
(006,'female','guangzhou',90.6,113.87,50.34),
(007,'female','xiameng',NULL,110.02,50.34),
(008,'male','wuhan',90.6,90.87,50.34),
(010,'male','guangzhou',90.6,98.87,48.6),
(011,'female','xiameng',90.6,96.87,48.6),
(012,'male','xiameng',90.6,87.17,50.34),
(013,NULL,'xiameng',90.6,80.87,48.6),
(014,'female','guangzhou',90.6,103.87,50.34),
(015,NULL,'xiameng',90.6,98.87,50.34),
(016,'female','wuhan',NULL,110.87,50.34),
(017,'female','guangzhou',90.6,98.87,50.34),
(018,'female','xiameng',90.6,96.87,50.34),
(019,'female','guangzhou',90.6,110.95,48.6),
(020,'female','wuhan',90.6,110.87,50.34),
(021,NULL,'guangzhou',NULL,110.87,50.34),
(022,'female','guangzhou',90.6,110.87,50.34),
(023,NULL,'wuhan',90.6,110.87,50.34),
(024,'female','guangzhou',90.6,110.87,50.34),
(025,'female','guangzhou',90.6,110.87,48.6),
(026,'male','guangzhou',NULL,110.87,50.34),
(027,'female','wuhan',90.6,110.87,50.34),
(028,'female','guangzhou',90.6,110.87,48.6),
(029,'female','xiameng',90.6,110.87,48.6),
(030,'male','guangzhou',90.6,110.87,45.0),
(031,'female','xiameng',NULL,110.87,50.34),
(032,'female','guangzhou',90.6,110.87,50.34),
(033,NULL,'guangzhou',NULL,96.5,50.34),
(034,'female','wuhan',90.6,96.5,45.0),
(035,'male','guangzhou',90.6,110.87,50.34),
(036,'female','wuhan',90.6,96.5,50.34),
(037,'female','guangzhou',90.6,110.87,50.34),
(038,'male','wuhan',90.6,110.87,50.34),
(039,'female','guangzhou',90.6,110.87,50.34),
(040,'male','xiameng',NULL,110.87,50.34),
(041,'female','wuhan',90.6,107.06,50.34),
(042,NULL,'guangzhou',NULL,110.87,50.34),
(043,'female','guangzhou',90.6,110.87,45.0),
(044,'male','wuhan',90.6,110.87,50.34),
(045,'female','xiameng',90.6,110.87,50.34),
(046,'female','guangzhou',90.6,107.06,50.34),
(047,'male','guangzhou',90.6,110.87,50.34),
(048,'female','guangzhou',90.6,96.5,45.0),
(049,NULL,'wuhan',NULL,107.06,50.34),
(050,NULL,'wuhan',90.6,110.87,50.34),
(051,NULL,'wuhan',NULL,110.87,50.34),
(052,NULL,'guangzhou',90.6,96.5,50.34),
(053,'female','guangzhou',90.6,110.87,50.34),
(054,NULL,'wuhan',90.6,110.87,48.6),
(055,'female','xiameng',90.6,110.87,50.34),
(056,NULL,'xiameng',90.6,107.06,45.0),
(057,'male','guangzhou',90.6,96.5,50.34),
(058,NULL,'guangzhou',90.6,110.87,50.34),
(059,NULL,'wuhan',NULL,110.87,48.6),
(060,'female','wuhan',NULL,110.87,48.6);

2. 常见聚合函数

函数解释
COUNT(columnX)计算columnX中包含非空值的行数
COUNT(*)计算输出表中的行数
MIN(columnX)返回columnX中的最小值。对于文本类,返回按字母顺序排序出现在最前面的值
MAX(columnX)返回columnX中的最大值
SUM(columnX)返回columnX中所有值的总和
AVG(columnX)返回columnX中所有值的平均值
STDDEV(columnX)返回columnX中所有值的样本标准差
VAR(columnX)返回columnX中所有值的样本方差
REGR_SLOPE(columnX,columnY)返回columnX作为因变量、columnY作为自变量时线性回归的斜率。
REGR_INTERCEPT(columnX,columnY)返回columnX作为因变量、columnY作为自变量时线性回归的截距。
CORR(columnX,columnY)返回数据中columnX和columnY之间的皮尔逊相关系数
SELECT COUNT(DISTINCT city) FROM 学生;

SELECT COUNT(*) FROM 学生 WHERE city='xiameng';
SELECT COUNT(*)/2 FROM 学生 WHERE city='xiameng';

 

SELECT MIN(b_score),MAX(b_score),AVG(b_score),STDDEV(b_score) FROM 学生;

 3. GROUP BY聚合函数

3.1 GROUP BY子句

        GROUP BY是一个子句,它可以根据GROUP BY子句中指定的某种键将数据集的行分成多个组,然后将聚合函数应用于单个组中的所有以生成单个数字。

使用GROUP BY查询每个城市有多少个学生

SELECT city,COUNT(*) FROM 学生 GROUP BY city ORDER BY city;

SELECT city,COUNT(*) FROM 学生 WHERE gender='female' GROUP BY city ORDER BY COUNT(*)

3.2 多列GROUP BY

使用GROUP BY查询每个城市有多少个男、女学生

SELECT city,gender,count(*) FROM 学生 GROUP BY city,gender ORDER BY city,gender;

3.3 HAVING子句

HAVING子句类似于WHERE子句,只不过它专门为GROUP BY查询设计的。

SELECT city,gender,count(*) FROM 学生 GROUP BY city,gender HAVING gender IS NOT NULL ORDER BY city,gender;

 3.4 使用GROUP BY函数查找缺失值

        要确定列是否有缺失值,可以使用SUM和COUNT函数修改后的CASE WHEN语句来确定缺失数据的百分比。

        根据查询结果,如果数据的缺失比例非常小(<1%),则可以考虑从分析中过滤或删除缺失的数据。如果有一定比例的数据缺失(<20%),则可以考虑使用典型值(均值、众数等)填充缺失的数据。如果数据缺失的比例超过20%,则可以考虑删除该列,因为没有足够的准确数据来根据该列中的值得出准确的结论。

查询a_score列的缺失值比例:

SELECT SUM(CASE 
    WHEN a_score is NULL 
    THEN 1  
    ELSE 0
END)/COUNT(*) AS missing_score FROM 学生;

 3.5 使用GROUP BY函数衡量数据质量

        如果想确定列中的每个值是否都是唯一的。虽然在大多数情况下,可以通过设置primary key约束的列来解决,但这并不总是可行。

如验证学生表中的student_id列包含的值是否唯一:

SELECT COUNT(DISTINCT student_id)=COUNT(*) AS equal_id FROM 学生;
SELECT COUNT(DISTINCT city)=COUNT(*) AS equal_city FROM 学生;

 

如果查询结果返回1,则该列的每一行都有唯一值;否则,至少有一个重复的值。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/762499.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应用程序发生异常,6个方法轻松解决!

“用电脑的时候大家有没有遇到过应用程序异常的情况呀&#xff01;刚刚突然遇到这种情况不知道应该怎么解决&#xff0c;请大家帮帮我吧&#xff01;” 应用程序发生异常是在使用电脑时常见的问题之一。当应用程序无法正常运行或突然崩溃时&#xff0c;它会显示一个错误消息或弹…

港联证券-尾盘集合竞价拉升意味着什么意思?

在股票市场中&#xff0c;尾盘集合竞价是指每个交易日的最后几分钟&#xff0c;即下午14:57到3:00之间的交易。在这段时间内&#xff0c;所有股票的买卖都将以竞价的方式进行&#xff0c;最终价格以最高买价与最低卖价的平均值确定&#xff0c;成交量也将作为当日的收盘价和成交…

Qt音视频开发47-文字和图片水印(可存储到MP4中)

一、前言 近期花了两周时间闭门啃硬骨头&#xff0c;主要就解决三个问题&#xff08;音视频同步存储和推流、图片水印并将水印信息存储到文件或者推流、rtsp推流&#xff09;&#xff0c;这三个问题困扰了很多年&#xff0c;以至于找遍了网络和翻遍ffplay代码以及ffmpeg示例的…

【ceph】存储池pg个数如何设置

存储池pg个数如何设置 参考官方文档说明&#xff1a;https://old.ceph.com/pgcalc/参数说明TargePGs per OSD&#xff1a;每个OSD的pg数OSD#存储池包含osd个数%Data存储池写入数据占总OSD容量百分比Size存储池冗余数

Selenium 报表自动化测试——黑盒测试篇

目录 前言&#xff1a; 背景 需求 分析 解决思路 解决方案 测试流程图 实现的功能 用例代码 两种测试方式 随机测试 指定测试 总结 前言&#xff1a; Selenium是一个广泛使用的自动化测试工具&#xff0c;用于Web应用程序的测试。它提供了一组功能强大的API&…

【CCF推荐】1区TOP刊,稳定检索29年,仅17天见刊,7月26即将截稿~

本期小编给大家推荐的是一本1区计算机科学类SCI. 该期刊为CCF推荐TOP刊&#xff0c;是计算机科学领域高质量期刊&#xff0c;隶属于世界前三出版社旗下。 发表与数字孪生、物联网、服务计算、智能计算、大数据、云计算、网络服务等方向相关或结合研究的高质量原创文章。 在…

关于SpringMVC的面试题

一、SpringMVC执行流程知道吗&#xff1f; 前后端分离开发环境下&#xff08;接口开发、异步请求&#xff09;&#xff1a; ①用户端发送请求到前端控制器DispatcherServlet ②DispatcherServlet收到请求调用HandlerMapping ③HandlerMapping找到具体的处理器&#xff0c;生…

itheima苍穹外卖项目学习笔记--Day8: 用户下单 / 微信支付

Day8&#xff1a;用户下单、微信支付 Day8&#xff1a;用户下单、微信支付a. 用户下单b. 微信支付 Day8&#xff1a;用户下单、微信支付 a. 用户下单 创建OrderController并提供用户下单方法&#xff1a; /*** 用户下单* param ordersSubmitDTO* return*/ PostMapping("…

数字信号转模拟信号PWM脉宽调制信号输入隔离变送器1Hz~10KHz转0-5V/0-10V4-20mA

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…

基于ClickHouse解决活动海量数据问题 | 京东云技术团队

1、背景 魔笛活动平台要记录每个活动的用户行为数据&#xff0c;帮助客服、运营、产品、研发等快速处理客诉、解决线上问题并进行相关数据分析和报警。可以预见到需要存储和分析海量数据&#xff0c;预估至少几十亿甚至上百亿的数据量&#xff0c;所以需要选择一款能存储海量数…

Linux 6.5 内核提供对 USB4 v2 的初步支持

导读最新内核补丁显示&#xff0c;英特尔正在为 Linux 6.5 内核提供对 USB4 v2 的初步支持&#xff0c;并在其新的英特尔 Barlow Ridge 离散控制器上进行初步启用。 去年&#xff0c;USB4 v2.0 规范作为 USB4 标准的下一代版本发布。 USB4 v2 可通过 USB Type-C 线支持 80 Gbp…

配电室智能运维功能性如何?

很多物业单位在配电室运维上&#xff0c;现状普遍是人少、事多、责任大。有时电工需要同时负责多个高低压配电室值班和设备维修&#xff0c;现有人员平时忙于应付各种设备设施的报修处理&#xff0c;配电室巡检和维护工作常常流于形式。另外&#xff0c;电力运行维护专业性很强…

SAP BOM中的技术类型简介

本文介绍一下BOM中技术类型 1、简单BOM 2、派生BOM 3、多重BOM 由于BOM的技术类型系统会自动设置所以大家基本感觉不到它的存在。基本上很少有同学会关注这个地方。 我们先从简单BOM开始&#xff0c;基本每个项目实施都会用到&#xff0c;就是一个物料具有多个组件清单 这种情…

【软件测试】Git 详细实战-打标签,一篇通关...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Git 打标签 一般会…

【正点原子STM32连载】 第六十章 USB读卡器实验摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html# 第六…

Qt开发关于3288,3128,3399程序升级方法

一、自动更新程序流程 加载本地配置文件获取获取保存的版本号 每次启动程序&#xff0c;首先从服务器请求最新的版本信息文件&#xff08;包括版本号&#xff0c;压缩包下载地址&#xff0c;更新时间&#xff0c;更新说明&#xff09; 解压下载的文件获取服务器版本号&#xff…

【状态估计】基于UKF法、AUKF法的电力系统三相状态估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

比较MQX、FreeRTOS和ucOS的优缺点

MQX, FreeRTOS和ucOS&#xff08;也称为μC/OS&#xff09;都是嵌入式实时操作系统&#xff08;RTOS&#xff09;中的代表性选择&#xff0c;它们各自有各自的优点和缺点。以下是它们的一些特点&#xff1a; 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个…

避免IDEA新建项目自动纳入git管理

引言 今天遇到了个很头疼的问题&#xff1a;我在 gitee 上创建了新的远程仓库 test1&#xff0c;然后通过 IDEA 拉取到了本地。随后我打算在该目录下新建新的 module&#xff0c;用来做不同的事情。比如这里的 mybatis 我打算用于测试 mybatis 相关的一些类、方法等。但问题是…

前端学习笔记:JavaScript基础语法(ECMAScript)

此博客参考b站&#xff1a;【黑马程序员前端JavaScript入门到精通全套视频教程&#xff0c;javascript核心进阶ES6语法、API、js高级等基础知识和实战教程】https://www.bilibili.com/video/BV1Y84y1L7Nn?p76&vd_source06e5549bf018e111f4275c259292d0da 这份笔记适用于已…