汇总统计数据--SQL中聚集函数的使用
目录
1、为什么需要汇总数据
2、聚集函数
(1)AVG函数
(2)COUNT函数
(3)MAX和MIN函数
(4)SUM函数
3、聚集不同值--DISTINCT
4、组合聚集函数
5、小结
博主用的是mysql8 DBMS,附上示例资料:
百度网盘链接: https://pan.baidu.com/s/1XaWi3Y7hpXbs_uHq2cPI6Q
提取码: fpnx
1、为什么需要汇总数据
我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供了专门的函数。使用这些函数,SQL 查询可用于检索数据,以便分析和报表生成。这种类型的检索例子有:
- 确定表中行数(或者满足某个条件或包含某个特定值的行数)-- 比如统计订单数;
- 获得表中某些行的和 -- 比如求取订单总金额;
- 找出表列(或所有行或某些特定的行)的最大值、最小值、平均值。
上述例子都需要汇总表中的数据,而不需要实际数据本身。因此,返回实际表数据纯属浪费时间和处理资源(更不用说带宽了)。再说一遍,我们实际想要的是汇总信息。
2、聚集函数
为方便这种类型的检索,SQL 给出了 5 个聚集函数,见表 9-1。这些函数能进行上述检索。与前一章介绍的数据处理函数不同,SQL 的聚集函数在各种主要 SQL 实现中得到了相当一致的支持。
聚集函数(aggregate function):对某些行运行的函数,计算并返回一个值。
函数 | 说明 |
---|---|
AVG() | 返回某列的平均值 |
COUNT() | 返回某列的行数 |
MAX() | 返回某列的最大值,正常使用的是日期和数值;对于文本直接返回最后一行 |
MIN() | 返回某列的最小值,与MAX相反 |
SUM() | 返回某列之和 |
(1)AVG函数
对过滤后的所有行的指定列取平均值;获取多列的平均值需要使用多个AVG函数。
说明:NULL 值 :AVG()函数忽略列值为 NULL 的行。
-- 求所有产品平均价格
SELECT AVG(prod_price) AS avg_price
FROM products;-- 求供应商是1002的所有产品均价,获取多列的平均值必须使用多个avg函数
SELECT AVG(prod_price) AS avg_price, MAX(prod_id) AS max_id
FROM products
WHERE vend_id = 1002; -- WHERE子句仅过滤出vend_id为1002的行
(2)COUNT函数
COUNT()函数进行计数。可利用 COUNT()确定表中行的数目或符合特定条件的行的数目。
COUNT()函数有两种使用方式:
- 使用 COUNT(*)对表中行的数目进行计数,不管表列中包含的是空值(NULL)还是非空值。
- 使用 COUNT(column)对特定列中具有值的行进行计数,忽略 NULL 值。
下面的例子返回 Customers 表中顾客的总数:
-- count统计行数,COUNT(*)统计该表所有行数,即使某些行的某列值是NULL
SELECT COUNT(*) -- 14行
FROM products;SELECT COUNT(prod_price) -- 13行,因为有一个price为NULL
FROM products;
通过COUNT可以统计满足某条件的行数:比如我想统计拥有邮箱的顾客有多少个?
-- 统计拥有邮箱的顾客有多少个?
SELECT COUNT(cust_email)
FROM customers;
说明:NULL 值
如果指定列名,则 COUNT()函数会忽略指定列的值为空的行,但如果COUNT()函数中用的是星号(*),则不忽略。
(3)MAX和MIN函数
MAX()返回指定列中的最大值。MAX()要求指定列名,如下所示:
-- MAX函数,一般找日期和数值,对于文本直接返回该列排序后的最后一行
-- MIN函数与MAX函数相反
SELECT MAX(prod_id) AS max_id --
FROM products;
提示:对非数值数据使用 MAX()
虽然 MAX()一般用来找出最大的数值或日期值,但许多(并非所有)DBMS 允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。在用于文本数据时,MAX()返回按该列排序后的最后一行。
说明:NULL 值 :MAX()函数忽略列值为 NULL 的行。
MIN()的功能正好与 MAX()功能相反,它返回指定列的最小值。与 MAX()一样,MIN()要求指定列名。
SELECT MIN(prod_price) AS min_price
FROM Products;其中 MIN()返回 Products 表中最便宜物品的价格。
(4)SUM函数
SUM()用来返回指定列值的和(总计)。下面举一个例子,OrderItems 包含订单中实际的物品,每个物品有相应的数量。可如下检索所订购物品的总数(所有 quantity 值之和):
-- 统计订单号为20005的所有物品个数
SELECT SUM(quantity) AS prod_quantity
FROM orderitems
WHERE order_num = 20005;
SUM()也可以用来合计计算值。在下面的例子中,合计每项物品的item_price*quantity,得出总的订单金额:
-- SUM函数统计指定列值的和,比如统计某订单的所有产品总数和总价格
-- 利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算。
SELECT SUM(quantity) AS items_ordered, SUM(item_price * quantity) AS total_price
FROM OrderItems
WHERE order_num = 20005;
提示:在多个列上进行计算 :
利用标准的算术操作符,所有聚集函数都可用来执行多个列上的计算。
说明:NULL 值:SUM()函数忽略列值为 NULL 的行。
如果对字符串列或者日期列进行SUM呢?是不行哒~
-- 统计字符串之和是什么样子?
SELECT SUM(prod_id)
FROM orderitems;
-- 结果是0-- 统计日期是什么样子?
SELECT SUM(order_date)
FROM orders;
-- 返回100254754000000,并不是时间戳哦,如果想验证的话可以使用FROM_UNIXTIME()函数
3、聚集不同值--DISTINCT
对所有行执行计算,指定 ALL 参数或不指定参数(因为 ALL 是默认行为)。
只包含不同的值,指定 DISTINCT 参数。
下面想通过COUNT函数通过orderitems表统计总共有多少个订单。
/*ALL和DISTINCT参数在聚集函数中的作用聚集不同值,上述中会对过滤后的数据中不为NULL的列值进行汇总,其实默认有一个ALL参数对于相同的值可能不需要汇总,比如我想在orderitem中查看有多少个订单聚集不同的值就需要使用DISTINCT参数
*/
SELECT COUNT(ALL order_num) -- 11个,有重复订单
FROM orderitems;SELECT COUNT(DISTINCT order_num) -- 5个,无重复订单
FROM orderitems;
注意:DISTINCT 不能用于 COUNT(*)
如果指定列名,则 DISTINCT 只能用于 COUNT()。DISTINCT 不能用于 COUNT(*)。类似地,DISTINCT 必须使用列名,不能用于计算或表达式。
说明:其他聚集参数
除了这里介绍的 DISTINCT 和 ALL 参数,有的 DBMS 还支持其他参数,如支持对查询结果的子集进行计算的 TOP 和 TOP PERCENT。为了解具体的 DBMS 支持哪些参数,请参阅相应的文档。
4、组合聚集函数
组合聚集函数,就是SELECT语句可包含多个聚集函数,这里注意取的列名不要和原表重复。
SELECT COUNT(*) AS num_items, MIN(prod_price) AS price_min, MAX(prod_price) AS price_max, AVG(DISTINCT prod_price) AS price_avg
FROM Products;
5、小结
- 有时候我们只需要某写数据的一些汇总或者统计信息,这时候不需要返回完整的数据,节省资源。
- SQL支持五类聚集函数用于汇总数据,分别是AVG、COUNT、MAX、MIN、SUM
- COUNT(*)代表统计行数
- 使用聚集函数时,指定列名后对NULL值不进行统计
- MAX可对数值、日期进行取最大值,对文本字符串只会返回最后一行,MIN相反
- 使用聚集函数时,可以利用标准操作符执行多个列上的计算操作,比如统计订单总金额
- 聚集函数默认参数ALL代表取所有值(包括相同),需要对不同值汇总要指定DISTINCT参数
- 组合聚集函数,就是SELECT语句可包含多个聚集函数
相关文章:
汇总统计数据--SQL中聚集函数的使用
目录 1、为什么需要汇总数据 2、聚集函数 (1)AVG函数 (2)COUNT函数 (3)MAX和MIN函数 (4)SUM函数 3、聚集不同值--DISTINCT 4、组合聚集函数 5、小结 博主用的是mysql8 DBMS…...

【C盘清理】C盘清理工具、Unity缓存文件转移
链接: https://pan.baidu.com/s/1yE_7qF741o4NmBIsrd3XzA?pwdbwnn CCleaner 用于清理磁盘垃圾 勾选你要分析的选项,点击分析,分析完毕后,点击清理。 主要别清错东西了。(可以不要勾选网络缓存、网络记录相关的选项࿰…...
C# 迭代,递归,回调--13
目录 一.迭代 迭代器示例: 关键点: 优势: 二.递归 递归示例: 关键点: 优势: 注意: 三.回调 回调示例: 关键点: 优势: 应用场景: 4.三种模式的特点对比: 迭代: 递归: 回调: 一.迭代 在C#中迭代通常指重复执行一系列指令 在C#中,迭代器是一种特殊的结构,允许…...
海康大数据面试题及参考答案
请详细描述 YARN 提交程序的流程。 YARN(Yet Another Resource Negotiator)是一个资源管理系统,用于管理集群中的计算资源。以下是在 YARN 中提交程序的详细流程: 首先是客户端准备阶段。用户编写好应用程序,这个程序可以是 MapReduce、Spark 或者其他基于 YARN 的计算框架…...

软件测试 —— 自动化测试(Selenium)
软件测试 —— 自动化测试(Selenium) 什么是SeleniumPython安装Selenium1.安装webdirver-manager2.安装Selenium 写一个简单用例CSS_SELECTOR和XPATH浏览器快速定位页面元素浏览器的前进(forward),后退(bac…...
华为2024嵌入式研发面试题
01 你认为最好的排序算法是什么? 在实际的编程中,最好的排序算法要根据实际需求和数据规模来选择,因为每种排序算法都有其优势和劣势。以下是一些常见排序算法及其优缺点: 冒泡排序 冒泡排序是一种简单直观的排序算法࿰…...

centos 搭建nginx+配置域名+windows访问
准备工作:一个完整的centos环境,nginx安装包(可以从官网下载)nginx: download 一:centos可能有精简版,部分环境没有相关依赖包, 需要检查以下项: 1.gcc检查:gcc -v(回车后应当有版…...

APP推荐:全新TV端来了,8K原画电视版
▌ 软件介绍 B站都不陌生吧,一个能追番、学习、娱乐的多元平台,之前也分享过几款第三方TV端,其中的BV最近更新了全新版本。 使用了全新的UI界面,由之前的顶部菜单栏改成了侧边布局,已解锁限制&…...

【MySQL】索引(一)
索引 一、磁盘1、物理结构2、示意图3、定位扇区4、读写操作的基本方式 二、页1、介绍2、示例3、作用与结构4、类型(1)数据页(2)其他 5、组织与管理6、性能优化7、示意图(B树) 三、索引1、作用2、注意事项 四…...
ES6的高阶语法特性
一、模板字符串的高级用法 1.1.模板字符串的嵌套 模板字符串的嵌套允许在一个模板字符串内部再嵌入一个或多个模板字符串。这种嵌套结构在处理复杂数据结构或生成具有层级关系的文本时非常有用。 1. 嵌套示例 假设我们有一个包含多个对象的数组,每个对象都有名称、…...

GO:GO程序如何处理缓存加载和大数据缓存
如果我们会在程序启动时,需要加载所有数据,最简单的方式就是程序启动,通过轮训从数据库拉取所有数据,并写入到本地缓存中。 问题:数据量较大的时候,程序加载慢,启动时间长,遇到问题不…...
时序数据库TDengine 3.3.5.0 发布:高并发支持与增量备份功能引领新升级
近日,TDengine 3.3.5.0 版本正式发布,带来了多项重磅更新与优化,从功能拓展到性能提升,再到用户体验进行了全面改进。本次更新围绕用户核心需求展开,涵盖了开发工具、数据管理、安全性、可视化等多个层面,为…...
信息系统项目管理-采购管理-采购清单示例
序号类别产品/服务名称规格/功能描述数量备注1硬件服务器高性能处理器,大容量存储10HP、DELL2网络设备高速路由器和交换机10华为3工作站多核处理器,高分辨率显示器25国产设备4移动检查设备手持式移动检查仪,可连接云平台30国产设备5打印机和扫…...

python识别图片中指定颜色的图案并保存为图片
示例代码: def chuli(color):import cv2import numpy as np# 定义颜色名称到HSV阈值范围的映射color_thresholds {red: ([0, 100, 100], [10, 255, 255], [160, 100, 100], [180, 255, 255]),yellow: ([20, 100, 100], [30, 255, 255]),blue: ([90, 100, 100], [1…...

【git命令行】git pull冲突如何使用stash暂存,不提交当前工作的情况下临时保存修改
1、git add . 暂存区暂存 2、git stash save "message" 保存当前工作目录的临时状态,并将其存储为一个新的stash 3 、git pull 重新拉取 4、**git stash pop**吐出之前暂存的改动,git stash clear 清空所有暂存...

浏览器输入http形式网址后自动跳转https解决方法
一、问题描述 使用浏览器 网上冲浪 时会遇到一个情况: 在浏览器中输入“http域名”后会自动变成“https 域名”的形式,此时“https 域名”的网站可能已停止对外提供服务了,这时会出现如下不友好的网页提示: 二、处理方法&#x…...
BertTokenizerFast 和 BertTokenizer 的区别
BertTokenizerFast 和 BertTokenizer 都是用于对文本进行标记化的工具,主要用于处理和输入文本数据以供 BERT 模型使用。它们都属于 HuggingFace 的 transformers 库。 主要区别 底层实现: BertTokenizer: 这是一个使用纯 Python 实现的标记器ÿ…...

【update 更新数据语法合集】.NET开源ORM框架 SqlSugar 系列
系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录前言 🍃一、实体对象更新1.1 单条与批量1.2 不更新某列1.3 只更新某列1.4 NULL列不更新1.5 无主键/指定列…...
测试人员面试需要掌握的内容
测试人员面试需要掌握的内容 1、在公司的测试流程是什么? 产品经理确认本次版本的需求,召开需求评审会,进行估时排期,需求和时间都确定之后,UI出设计图,开发人员进行开发,测试人员编写测试用例…...

git 新建分支并推到远程分支
在git或者码云上创建一个项目管理,已经存在主分支,现在需要创建一个其他分支; 具体操作: 1. 查看分支情况 git branch 2. 查看分支状态 git status 3. 一次性创建并切换到本地分支 git checkout -b dev 分步骤创建和切换&…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

GC1808高性能24位立体声音频ADC芯片解析
1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率,…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)
名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 原创笔记:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 上一篇:《数据结构第4章 数组和广义表》…...
电脑桌面太单调,用Python写一个桌面小宠物应用。
下面是一个使用Python创建的简单桌面小宠物应用。这个小宠物会在桌面上游荡,可以响应鼠标点击,并且有简单的动画效果。 import tkinter as tk import random import time from PIL import Image, ImageTk import os import sysclass DesktopPet:def __i…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...
初级程序员入门指南
初级程序员入门指南 在数字化浪潮中,编程已然成为极具价值的技能。对于渴望踏入程序员行列的新手而言,明晰入门路径与必备知识是开启征程的关键。本文将为初级程序员提供全面的入门指引。 一、明确学习方向 (一)编程语言抉择 编…...