SQL汇总数据:聚集函数

我们经常需要汇总数据而无需实际检索出这些数据,为此SQL提供了专门的函数。使用这些函数,SQL查询能够高效地检索数据,以便进行分析和报表生成。这类检索的例子包括:

  • 确定表中行数(或者满足某个条件或包含某个特定值的行数);
  • 获得表中某些列的和;
  • 找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。

上述例子都需要汇总表中的数据,而无需检索数据本身。因此,返回实际表数据会浪费时间和处理资源。我们真正需要的是汇总信息。

为方便这种类型的检索,SQL提供了五个聚集函数,这些函数能够执行上述检索任务。SQL的聚集函数在各种主要的SQL实现中得到了广泛且一致的支持。

1.AVG()函数

AVG()函数通过计算表中指定列值的总和,并除以行数,来求得该列的平均值。AVG()可用于返回所有列的平均值,也可用于返回特定列或行的平均值。以下示例使用AVG()返回Products表中所有产品的平均价格:

SELECT AVG(prod_price) AS avg_price 
FROM Products;

分析:此SELECT语句返回值avg_price,它表示Products表中所有产品的平均价格。

AVG()也可用于确定特定列或行的平均值。以下示例返回特定供应商所提供产品的平均价格:

SELECT AVG(prod_price) AS avg_price 
FROM Products 
WHERE vend_id = 'DLL01';

分析:这条SELECT语句与前一条的不同之处在于,它包含了WHERE子句,用于过滤出vend_id为'DLL01'的产品,因此avg_price中返回的值只是该供应商产品的平均值。

说明:AVG()函数会忽略列值为NULL的行。

2.COUNT()函数

COUNT()函数用于计数。可以使用COUNT()确定表中行的数目或符合特定条件的行的数目。

COUNT()函数有两种使用方式:

  • 使用COUNT(*)对表中所有行进行计数,无论列中是否包含空值(NULL)。
  • 使用COUNT(column)对特定列中具有非空值的行进行计数,忽略NULL值。

以下示例返回Customers表中顾客的总数:

SELECT COUNT(*) AS num_cust 
FROM Customers;

分析:在此示例中,利用COUNT(*)对所有行进行计数,无论行中各列的值是什么。计数结果在num_cust中返回。

以下示例只对具有电子邮件地址的客户进行计数:

SELECT COUNT(cust_email) AS num_cust 
FROM Customers;

分析:这条SELECT语句使用COUNT(cust_email)对cust_email列中有值的行进行计数。在此示例中,假设cust_email的计数为3(表示5个顾客中只有3个顾客有电子邮件地址)。

3.MAX()函数

MAX()函数返回指定列中的最大值。MAX()要求指定列名,如下所示:

SELECT MAX(prod_price) AS max_price 
FROM Products;

 分析:这里,MAX()返回Products表中最贵物品的价格。

提示:对非数值数据使用MAX()
虽然MAX()一般用来找出最大的数值或日期值,但许多(并非所有)DBMS允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,MAX()返回按该列排序后的最后一行。

说明:MAX()函数会忽略列值为NULL的行。

4.MIN()函数

MIN()函数的功能与MAX()函数相反,它返回指定列的最小值。与MAX()一样,MIN()要求指定列名,如下所示:

SELECT MIN(prod_price) AS min_price 
FROM Products;

分析:其中MIN()返回Products表中最便宜物品的价格。

提示:对非数值数据使用MIN()
虽然MIN()一般用来找出最小的数值或日期值,但许多(并非所有)DBMS允许将它用来返回任意列中的最小值,包括返回文本列中的最小值。在用于文本数据时,MIN()返回该列排序后最前面的行。

说明:MIN()函数会忽略列值为NULL的行。

5.SUM()函数

SUM()函数用来返回指定列值的总和(总计)。

以下示例中,OrderItems表包含订单中实际的物品,每个物品有相应的数量。可以如下检索所订购物品的总数(所有quantity值之和):

SELECT SUM(quantity) AS items_ordered 
FROM OrderItems 
WHERE order_num = 20005;

 分析:函数SUM(quantity)返回订单中所有物品数量之和,WHERE子句确保只统计某个特定订单中的物品。

SUM()也可以用来合计计算值。以下示例中,合计每项物品的item_price*quantity,得出总的订单金额:

SELECT SUM(item_price*quantity) AS total_price 
FROM OrderItems 
WHERE order_num = 20005;

分析:函数SUM(item_price*quantity)返回订单中所有物品价格之和,WHERE子句同样确保只统计某个特定订单中的物品。

说明:SUM()函数会忽略列值为NULL的行。

6.聚集不同值

以上五个聚集函数都可以如下使用:

  • 对所有行执行计算,不指定参数或使用ALL参数(因为ALL是默认行为)。
  • 只包含不同的值,指定DISTINCT参数。

提示:ALL为默认行为,因此不需要显式指定。如果不指定DISTINCT,则假定为ALL。

以下示例使用AVG()函数返回特定供应商提供的产品的平均价格。它与上面的SELECT语句相同,但使用了DISTINCT参数,因此平均值只考虑各个不同的价格:

SELECT AVG(DISTINCT prod_price) AS avg_price 
FROM Products 
WHERE vend_id = 'DLL01';

分析:在使用了DISTINCT后,此示例中的avg_price可能会更高,因为有多个物品具有相同的较低价格。排除这些重复的价格后,平均价格会相应提升。

注意:DISTINCT 不能用COUNT(*) 
如果指,则 DISTINCT 只能用于 COUNT()DISTINCT 不能用COUNT(*)类似地DISTINCT 必须使用列名能用于计算表达式 

提示DISTINCT MIN()MAX() 
虽然 DISTINCT 从技术上可用于 MIN() MAX(),但这样做没有价值。一个列中的最小值和最值不管是否考虑不同值结果都是相同的。 

7.组合聚集函数

到目前为止的所有聚集函数示例都只涉及单个函数。但实际上,SELECT语句可以根据需要包含多个聚集函数。以下示例展示了如何组合使用多个聚集函数:

SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(prod_price) AS price_avg 
FROM Products;

分析:这里用单条SELECT语句执行了四个聚集计算,返回了四个值(Products表中物品的数目、产品价格的最高值、最低值以及平均值)。

总结:

聚集函数用于汇总数据。SQL支持五个聚集函数,这些函数可以以多种方式使用,返回所需的结果。这些函数非常高效,它们返回的结果通常比在自己的客户端应用程序中计算要快得多。

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

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

相关文章

Midjourney基础教程-功能界面详解

基础入门教程: 一.Midjourney快速入门(3步画出你的第一张图) 注: 1.平台为大家设置了自动翻译,可以直接写中文提示词,自动翻译成英文。当然要求更准确,大家可以先翻译成英 文在输入进来。 2.提示词如何去…

AWS云计算问答式知识库系统的实现

AWS平台上建立一个生成式人工智能专业文文档问答式网站,前端用Flask框架,后端用Fast API,前端调用后端的唯一API来完成大模型文档搜索的功能,使用AWS Bedrock里的Titan和Llama3模型,以及OpenAI 4.0 API来调用模型并提供…

初识Linux · 日志编写

目录 前言: 日志的简单说明 编写日志 前言: 在线程池部分我们纵观全文,可以发现全文有很多很多的IO流,看起来还是差点意思的,而我们今天提到的日志,是在今后的代码编写中会经常接触,或者说在…

微信小程序做电子签名功能

文章目录 最近需求要做就记录一下。 人狠话不多&#xff0c;直接上功能&#xff1a; 直接搂代码吧,复制过去就可以用&#xff0c;有其他需求自己改吧改吧。 signature.wxml <!-- 电子签名页面 --> <custom-navbar title"电子签名"show-home"{{fals…

【HarmonyOS】使用AVPlayer播放音乐,导致系统其它应用音乐播放暂停 - 播放音频焦点管理

【HarmonyOS】使用AVPlayer播放音乐&#xff0c;导致系统其它应用音乐播放暂停 - 播放音频焦点管理 一、前言 在鸿蒙系统中&#xff0c;对于音乐播放分为几种场景。音乐&#xff0c;电影&#xff0c;音效&#xff0c;闹钟等。当使用AVPlayer播放音乐时&#xff0c;如果不处理…

API接口安全:保障电商数据不被泄露的关键

在当今的数字化时代&#xff0c;电子商务&#xff08;电商&#xff09;已成为全球商业活动的重要组成部分。随着电商平台的日益增多和用户数据的海量积累&#xff0c;数据安全问题也日益凸显。API&#xff08;应用程序编程接口&#xff09;作为电商平台与外部系统交互的桥梁&am…

金融机构远程办公面临的安全挑战

当前&#xff0c;金融机构的业务模式、IT架构都发生了深刻变化。在建设远程办公系统时&#xff0c;金融机构需要面对以下几个方面的挑战&#xff1a; 如何实现“边界模糊化”网络环境下的安全接入&#xff1f; 随着金融机构基础设施云化、业务互联网化和办公移动化&#xff0…

Linux中inode、软硬连接

磁盘的空间管理 如何对磁盘空间进行管理&#xff1f; 假设在一块大小为500G的磁盘中&#xff0c;500*1024*1024524288000KB。在磁盘中&#xff0c;扇区是磁盘的基本单位&#xff08;一般大小为512byte&#xff09;&#xff0c;而文件系统访问磁盘的基本单位是4KB&#xff0c;因…

基于卷积神经网络的垃圾分类系统实现(GUI应用)

1.摘要 本文主要实现了一个卷积神经网络模型进行垃圾图像分类&#xff0c;为了提高垃圾分类模型的准确率&#xff0c;使用使用Batch Normalization层、使用早期停止策略来防止过拟合等方法来优化模型&#xff0c;实验结果显示最终优化后的模型准确率较高90%左右。最终&#xf…

IDEA结合GitLab使用

GitLab新建仓库 使用管理员账号创建gitlab仓库创建空白文件填写项目名称及命名空间 注意&#xff1a;取消勾选【使用自述文件初始化仓库】&#xff0c;否则IDEA中push代码报错 设置仓库权限 【设置】-【仓库】-【受保护分支】中需要添加哪些角色可以提交与合并代码&#xff0…

apisix lua插件开发记录

1 如何匹配路径中的参数 文章给出了具体的方法&#xff0c;但有隐藏的坑未提及。 router radixtree_uri_with_parameter 启用后&#xff0c;对路径上的参数名有要求&#xff0c;不能有_。否则会提示404&#xff0c;因为 router radixtree_uri_with_parameter解析不了。 2 插…

洛谷 P1179 [NOIP2010 普及组] 数字统计 C语言

题目&#xff1a; https://www.luogu.com.cn/problem/P1179 思路&#xff1a;直接暴力过 代码&#xff1a; #include<iostream> using namespace std; int cnt(int x) {int sum 0;while(x){int temp x %10;if(temp 2){sum;}x x/10;}return sum; } int main(void) …

Android APP自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记&#xff0c;当前清理空间&#xff0c;本来想直接删除掉的&#xff0c;但是感觉有些舍不得&#xff0c;因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录&#xff1a;在Android中不能直接打开res aw目录中的数据…

【21天学习AI底层概念】day2 机器学习基础

按照由浅入深的顺序&#xff0c;下一步学习 机器学习&#xff08;Machine Learning&#xff09; 的基础是最自然的选择。机器学习是人工智能的核心技术之一&#xff0c;很多AI系统都依赖它。以下是学习路线建议&#xff1a; 第二步&#xff1a;机器学习基础 学习目标&#xff…

在GitHub上fork 别人的仓库 到 自己的仓库,clone到本地,处理后再上传回Github请求PR的过程

如题 一、fork 别人的仓库 到 自己的仓库 这是一种完全的复刻&#xff0c;所有内容都会被拿过来。 点击fork 写信息 创建fork 二、把它clone 到本地 先回到home&#xff0c;打开刚才 我们fork 的工程。 复制地址。 然后 在我们 本地 你去创建一个文件夹 来 接受他 比如我…

MATLAB 识别色块和数量

文章目录 前言步骤 1: 读取图像步骤 2: 转换为 HSV 颜色空间步骤 3: 定义颜色范围步骤 4: 创建颜色掩码步骤 5: 应用形态学操作&#xff08;可选&#xff09;步骤 6: 标记和显示结果完整代码步骤七 返回色块坐标 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&…

深入理解偏向锁、轻量级锁、重量级锁

一、对象结构和锁状态 synchronized关键字是java中的内置锁实现&#xff0c;内置锁实际上就是个任意对象&#xff0c;其内存结构如下图所示 其中&#xff0c;Mark Word字段在64位虚拟机下占64bit长度&#xff0c;其结构如下所示 可以看到Mark Word字段有个很重要的作用就是记录…

三星索引概念

三星索引概念 对于一个查询而言&#xff0c;一个三星索引&#xff0c;可能是其最好的索引。如果查询使用三星索引&#xff0c;一次查询通常只需要进行一次磁盘随机读以及一次窄索引片的 扫描&#xff0c;因此其相应时间通常比使用一个普通索引的响应时间少几个数量级。 三星索引…

文字稿 | MatrixOne2.0.0:AI向量与高可用能力的重磅升级MatrixOne 2.0.0 新特性解读

MatrixOne 2.0.0 是一款 AI 驱动的云原生超融合数据库&#xff0c;采用了存算分离的架构&#xff0c;全面优化了云上资源利用效率。 MatrixOne兼容 MySQL 协议和语法&#xff0c;具备支持混合负载场景的能力&#xff0c;并结合向量数据类型、全文检索等特性&#xff0c;为生成式…

Qt Xlsx安装教程

Qt Xlsx安装教程 安装perl 如果没有安装perl&#xff0c;请参考perl Window安装教程 下载QtXlsxWriter源码 下载地址 ming32-make编译32 lib库 C:\Qt\Qt5.12.12\5.12.12\mingw73_32>d: D:\>cd D:\Code\QtXlsxWriter-master\QtXlsxWriter-master D:\Code\QtXlsxWrit…