SQL汇总数据:聚集函数

news2024/12/24 21:28:55

我们经常需要汇总数据而无需实际检索出这些数据,为此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.coloradmin.cn/o/2257686.html

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

相关文章

HTML颜色-HTML脚本

HTML脚本 js使得HTML页面具有更强的动态和交互性 HTML<script>标签 标签用于定义客户端脚本&#xff0c;比如javascript 可包含脚本语句&#xff0c;也可以通过src属性指向外部的脚本文件 JavaScript最常用于图片操作&#xff0c;表单验证以及动态的内容更新 HTML<n…

ASP.NET Core8.0学习笔记(二十五)——EF Core Include导航数据加载之预加载与过滤

一、导航属性数据加载 1.在EF Core中可以使用导航属性来加载相关实体。 2.加载实体的三种方式&#xff1a; (1)预先加载&#xff1a;直接在查询主体时就把对应的依赖实体查出来&#xff08;作为初始查询的一部分&#xff09; (2)显式加载&#xff1a;使用代码指示稍后显式的从…

【工具变量】上市公司企业过度负债数据(2000-2022年)

一、计算方式&#xff1a;参考C刊《投资研究》汪昌云&#xff08;2022&#xff09;老师的研究&#xff0c;将实际负债率与 Tobit 回归得到的目标负债率之差认定为过度负债率&#xff0c;该种方式认为目标负债率的驱动因素包括公司特征与行业因素&#xff0c;较为全面&#xff0…

分布式数据库中间件-Sharding-JDBC

文章目录 Sharding-JDBCSharding-JDBC介绍Sharding-JDBC的作用什么是分库分表分库分表的方式分库分表带来的问题事务一致性问题跨节点关联查询跨节点分页、排序函数主键重复 Sharding-JDBC 入门&#xff08;水平分表&#xff09;需求说明环境搭建编写代码流程分析其他配置方式概…

FPGA 16 ,Verilog中的位宽:深入理解与应用

目录 前言 一. 位宽的基本概念 二. 位宽的定义方法 1. 使用向量变量定义位宽 ① 向量类型及位宽指定 ② 位宽范围及位索引含义 ③ 存储数据与字节数据 2. 使用常量参数定义位宽 3. 使用宏定义位宽 4. 使用[:][-:]操作符定义位宽 1. 详细解释 : 操作符 -: 操作符 …

HTML:表格重点

用表格就用table caption为该表上部信息&#xff0c;用来说明表的作用 thead为表头主要信息&#xff0c;效果加粗 tbody为表格中的主体内容 tr是 table row 表格的行 td是table data th是table heading表格标题 &#xff0c;一般表格第一行的数据都是table heading

hbuilder 本地插件配置

插件存放路径&#xff0c;项目根目录nativeplugins下&#xff0c;没有就新建。 aar文件存放路径\nativeplugins\pda-module\android package.json存放路径\nativeplugins\module\ 配置package.json文件 { "name": "本地插件", "id": &quo…

大模型应用的数字能源数据集

除了尚须时日的量子计算解决算力效率和能源问题&#xff0c;以及正在路上的超越transformer的全新模型架构外&#xff0c;无疑是“数据集”&#xff0c;准确讲是“高质量大规模多样性的数据集”。数据集是大模型发展的核心要素之一&#xff0c;是大计算的标的物&#xff0c;是实…

飞书解除复制,下载文件限制终极方案

1.通过移除copy 事件&#xff0c;可以复制文档内容&#xff0c;但是飞书表格增加了键盘按键事件&#xff0c;表格无法复制&#xff0c;下载 2.通过chrome插件&#xff0c;可以复制clould document converter 可以实现下载飞书文档&#xff0c;但是无法下载表格 而且无法识别自定…

Java面试题精选:设计模式(二)

1、装饰器模式与代理模式的区别 1&#xff09;代理模式(Proxy Design Pattern ) 原始定义是&#xff1a;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许将请求提交给对象前后进行一些处理。 代理模式的适用场景 功能增强 当需要对一个对…

自然语言处理:从入门到精通全指引

一、引言 自然语言处理&#xff08;NLP&#xff09;作为人工智能领域的关键分支&#xff0c;旨在让计算机理解、生成和处理人类语言&#xff0c;近年来取得了令人瞩目的成就&#xff0c;在智能客服、机器翻译、文本分析、语音助手等众多领域发挥着重要作用。从入门到精通自然语…

Typora 修改默认的高亮颜色

shift F12 参考 怎么给typora添加颜色&#xff1f;

(1)Quartus中如何在外设FLASH中固化jic文件

&#xff08;1&#xff09;在产生jic文件前&#xff0c;必须已经综合通过&#xff0c;生成了sof文件 &#xff08;2&#xff09;点击file-convert Programming Files... &#xff08;3&#xff09;文件类型选择jic文件&#xff0c;flsh型号设定为EPCS128 &#xff08;4&#…

OpenAI2024-12D-3:Sora 发布,谁更胜一筹——Sora 与可灵的全面前瞻对比

藏了一年&#xff0c;终于OpenAI在12天活动的第三天&#xff0c;正式发布了其全新创意工具——Sora&#xff0c;这款工具凭借其强大的文本到视频生成能力和高度的创作自由度&#xff0c;迅速吸引了广大创作者的目光。与此同时&#xff0c;已经在视频创作领域有着成熟表现的可灵…

重生之我在异世界学智力题(4)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言渡河问题&#xff08;1&#xff09;问…

福州大学《2024年812自动控制原理真题》 (完整版)

本文内容&#xff0c;全部选自自动化考研联盟的&#xff1a;《福州大学812自控考研资料》的真题篇。后续会持续更新更多学校&#xff0c;更多年份的真题&#xff0c;记得关注哦~ 目录 2024年真题 Part1&#xff1a;2024年完整版真题 2024年真题

实现盘盈单自动化处理:吉客云与金蝶云星空数据对接

盘盈单103v2对接其他入库&#xff1a;吉客云数据集成到金蝶云星空 在企业信息化管理中&#xff0c;数据的高效流转和准确性至关重要。本文将分享一个实际案例&#xff0c;展示如何通过轻易云数据集成平台&#xff0c;将吉客云的数据无缝对接到金蝶云星空&#xff0c;实现盘盈单…

Meta Llama 3.3 70B:性能卓越且成本效益的新选择

Meta Llama 3.3 70B&#xff1a;性能卓越且成本效益的新选择 引言 在人工智能领域&#xff0c;大型语言模型一直是研究和应用的热点。Meta公司最近发布了其最新的Llama系列模型——Llama 3.3 70B&#xff0c;这是一个具有70亿参数的生成式AI模型&#xff0c;它在性能上与4050…

【优选算法 前缀和】前缀和算法模板详解:一维前缀 & 与二维前缀和

一维前缀和 题目解析 算法原理 解法一&#xff1a;暴力解法 简单模拟&#xff0c;读完题意有 q 次询问&#xff0c;给哪两个数&#xff0c;就求哪段区间的和并且返回&#xff0c;这样的做法&#xff0c;时间复杂度为O(N*q)&#xff0c;这个时间复杂度会超时&#xf…

yarn : 无法加载文件 C:\Users\L\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁

关于执行安装yarn命令后执行yarn -v报错&#xff1a; 先确认执行安装yarn命令是否有误 # 安装yarn npm install yarn -g 终端输入set-ExecutionPolicy RemoteSigned 当然如果yarn -v仍然执行失败&#xff0c;考虑使用管理员方式运行IDEA&#xff0c; 注&#xff1a;如上操作…