SQL | 汇总数据

news2024/11/26 22:18:21

9-汇总数据

9.1-聚集函数

在实际开发过程中,可能会遇到下面这些情况:

  • 确定大于某个值的有多少行数据,比如游戏排行榜,查询玩家排行多少名。

  • 获取表中某些行的和,比如双十一当天,某个用户总订单价格是多少元。

  • 获取表中最大值,最小值,平均值。

上述这些例子只需要返回统计后的数值,而不需要返回所有数值,然后在进行统计,这么做节省了时间,提高了效率。

为了方便做类似上述例子的操作,SQL给出了五个函数。

 

9.1.1 avg()函数

avg()函数的执行过程:先对表中行数进行计算,然后求得某列的和,最后求取平均值。

例如:返回products表中的平均价格

select avg(prod_price) as avg_price
from products;

avg()也可以结合WHERE子句来确定特定的列或者行的平均值。

select avg(prod_price) as avg_price
from products
where vend_id = 'DLL01';

 

上述SQL语句是仅过滤供应商为‘DLL01’的产品的价格的平均值。

只用于单个列 AVG()只能用来确定特定数值列的平均值,而且列名必须作为函数参数给出。为了获得多个列的平均值,必须使用多个AVG()函数。

注意:avg函数会忽略列值为NULL的行。

9.1.2 count()函数

count()函数是用来计数的。可利用count()确定表中行的数目或者符合规定的行的数目。

  • 使用count(*) 对表中行的数目进行计数,不管表列中包含的是空值NULL还是非空值。

  • 使用count(column)对特定列中具有值的行进行计数。忽略NULL值。

select count(*) as num_cust
from customers;

 

上述SQL语句查询customers表中的顾客总数。count(*)对所有具有值的行进行计数,计算得到的值在num_cust中返回。

select count(cust_email) as num_cust
from customers;

 

上述SQL语句用于统计顾客表中拥有邮箱的顾客有多少,主动忽略了NULL值。

NULL值 如果指定列名,则COUNT()函数会忽略指定列的值为NULL的行,但如果COUNT()函数中用的是星号(*),则不忽略。

9.1.3 max()函数

max()函数返回指定列中的最大值。max()函数要指定列名。

select max(prod_price) as max_price
from products;

 

上述SQL语句是查询产品列表中价格最高的产品。

max()函数一般用来找出最大的数值或者日期,但是有许多DBMS允许它返回任意列中的最大值,包括返回文本列中的最大值。当max()函数用于返回文本最大值时,返回按该列排序的最后一行。

max()函数忽略值为NULL的行。

9.1.4 min()函数

与max()函数相反,min()函数返回指定列的最小值。min()函数要求指定列名。

select min(prod_price) as min_price
from products;

 

min()函数一般用来找出最小的数值或者日期,但是有许多DBMS允许它返回任意列中的最小值,包括返回文本列中的最小值。当min()函数用于返回文本最小值时,返回按该列排序的最前面的行。

min()函数忽略NULL值所在的行。

9.1.5 sum()函数

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

例如:orderitems表中包含订单中实际的物品,每个物品有相应的数量,由此计算所订购的物品的总数。

select sum(quantity) as items_ordered
from orderitems
where order_num = 20005;

 

上述SQL语句用于返回总的物品数量,一共是200个。

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

sum()也可以用来合计计算值。

select sum(item_price*quantity) as total_price
from orderitems
where order_num = 20005;

 

上述SQL语句计算所有符合条件的价值的总和。

sum()函数忽略列值为NULL的行。

9.2-聚集不同值

上述五种聚集函数都可以按照下面的方式使用:

  • 对所有行执行计算,指定all参数或不指定参数(因为all是默认行为)。

  • 只包含不同的值,指定distinct

注意:all参数不需要指定,它是默认行为。如果不指定distinct,则假定为all。

下面举例说明指定distinct参数,而不使用默认参数。

select avg(distinct prod_price) as avg_price
from products
where vend_id = 'DLL01';

 

因为使用了distinct参数,所以计算平均值的时候自动忽略相同的价格去计算平均值。但是计算后高于上面我们计算的平均价格,这是因为数量虽然少了,但是价格低的物品数量也少了。

另外,distinct不能用于count(*),但是可以用于指定列名的count(),也就是说:如果想要使用distinct,就必须指定列名。

distinct可以用于min()和max(),但是毫无意义,因为只有一行。

9.3-组合聚集函数

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;

 

上述SQL语句返回products表中物品数量,产品价格最高,产品价格最低以及平均值。

练习

  1. 编写SQL语句,确定已售出产品的总数(使用OrderItems中的quantity列)。

    select sum(quantity) as selled
    from orderitems;

     

  2. 修改刚刚创建的语句,确定已售出产品项(prod_id)BR01的总数。

    select sum(quantity) as selled
    from orderitems
    where prod_id = 'BR01';

     

  3. 编写SQL语句,确定Products表中价格不超过10美元的最贵产品的价格(prod_price)。将计算所得的字段命名为max_price。

    select max(prod_price) as max_price
    from products
    where prod_price <= 10;

     

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

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

相关文章

208、仿真-51单片机脉搏心率与心电报警Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于PSO-LSSVM-Adaboost粒子群算法优化最小二乘支持向量机结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考…

MySQL8安装和删除教程 保姆级(Windows)

下载 官网: mysql官网点击Downloads->MySQL Community(GPL) Downloads->MySQL Community Server(或者点击MySQL installer for Windows) Windows下有两种安装方式 在线安装 一般带有 web字样 这个需要联网离线安装 一般没有web字样 安装 下载好之后,版本号可以不一样&…

Web 自动化测试学会这一招,下班至少早一小时

♥ 前 言 大家都知道&#xff0c;我们在通过 Selenium 执行 Web 自动化测试时&#xff0c;每次都需要启动/关闭浏览器&#xff0c;如果是多线程执行还会同时打开多个&#xff0c;比较影响工作的正常进行。那有没有办法可以不用让浏览器的自动化执行干扰我们的工作呢&#xf…

graphab 教程 ——生成廊道

Graphab软件包括图谱创建、基于图谱的连通性计算、分析与推广、制图四个模块。Graphab软件的图谱创建基于栅格数据进行,包括斑块识别和连接建立两个步骤。Graphab 软件可识别的栅格数据格式包括TIFF、ASCI和RST,栅格像元记录数值用于识别斑块类型,识别规则可以选择四邻域或八邻…

B100-技能提升-线程池分布式锁

目录 线程池什么是线程池&#xff1f;为什么用线程池?线程池原理常见四种线程池和自定义线程池 线程池 什么是线程池&#xff1f; 池化技术 为什么用线程池? 1 由于设置最大线程数&#xff0c;防止线程过多而导致系统崩溃。 2 线程复用&#xff0c;不需要频繁创建或销毁…

WebAPIs 第三天

DOM 事件进阶 事件流事件委托其他事件元素尺寸与位置 一.事件流 事件流与两个阶段说明事件捕获事件冒泡阻止冒泡解绑事件 1.1 事件流与两个阶段说明 ① 事件流&#xff1a;指的是事件完整执行过程中的流动路径 ② 事件流分为捕获阶段和冒泡阶段 1.2 事件捕获 从DOM根元素…

opsForHash() 与 opsForValue 请问有什么区别?

&#x1f449;&#xff1a;&#x1f517;官方API参考手册 如图&#xff0c;opsForHash()返回HashOperations<K,HK,HV>但是 opsForValue()返回ValueOperations<K,V>… 区别就是opsForHash的返回值泛型中有K,HK,HV,其中K是Redis指定的某个数据库里面某一个关键字(由…

三分钟带你快速掌握MongoDB数据库和集合基础操作

文章目录 前言一、案例需求二、数据库操作1. 选择和创建数据库2. 数据库的删除 三、集合操作1. 集合的显式创建&#xff08;了解&#xff09;2. 集合的隐式创建3. 集合的删除 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便…

太牛了!国内版ChatDoc企业知识库,直接操作Doc、Docx、PDF、txt等文件

自ChatGPT问世以来&#xff0c;国外就有ChatPDF、ChatDOC等基于文档问答的项目&#xff0c;但是国内还一直处于对话类产品的研发中。 贵州猿创科技研发了基于本地向量模型的ChatDoc知识库系统&#xff0c;可以直接上传Doc、Docx、PDF、txt、网页链接等进行问答。 体验地址&…

【算法篇C++实现】常见查找算法

文章目录 &#x1f680;一、预备知识⛳&#xff08;一&#xff09;查找的定义⛳&#xff08;二&#xff09;数组和索引 &#x1f680;二、二分查找&#x1f680;三、穷举搜索&#x1f680;四、并行搜索⛳&#xff08;一&#xff09;并发的基本概念⛳&#xff08;二&#xff09;…

修改VS Code终端的显示行数

文章目录 前言修改VS Code终端显示行数参考 前言 在我们使用VS Code运行代码的过程中&#xff0c;有时需要再终端中显示很多的运行过程信息或者结果。然而&#xff0c;VS Code的终端默认显示1000行的内容&#xff0c;随着显示内容的增多&#xff0c;之前的内容就丢失了。为了解…

【单片机毕业设计2-基于stm32c8t6的智能台灯系统】

【单片机毕业设计2-基于stm32c8t6的智能台灯系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇2 基于stm32的智能台灯系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖 企鹅号&#xff1a;2836235214 一、功…

Java IO流——【从零构建信息管理系统】

Java I/O流——【从零构建信息管理系统】 文章目录 什么是Java I/O流介绍理解字节流和字符流的区别 Java I/O流的作用Java I/O流方法InputStream方法Reader方法OutputStream方法Writer方法Java I/O体系的全体类 使用示例Java I/O流在实际应用中使用效果 什么是Java I/O流 介绍…

多线程事务怎么回滚?

项目中用到了多线程去批量处理一些数据&#xff0c;当时想当然认为只要方法上加上Transactional注解就好了&#xff0c;实际并未达到想要的处理效果。特此去学习了下关于多线程事务回滚相关方案&#xff0c;参考了网上其他资料&#xff0c;这里整理并记录下学习历程。 站在巨人…

在 IntelliJ IDEA 中使用 Docker 开发指南

目录 一、IDEA安装Docker插件 二、IDEA连接Docker 1、Docker for Windows 连接 2、SSH 连接 3、Connection successful 连接成功 三、查看Docker面板 四、使用插件生成镜像 一、IDEA安装Docker插件 打开 IntelliJ IDEA&#xff0c;点击菜单栏中的 "File" -&g…

山西电力市场日前价格预测【2023-08-14】

日前价格预测 预测明日&#xff08;2023-08-14&#xff09;山西电力市场全天平均日前电价为322.03元/MWh。其中&#xff0c;最高日前电价为366.98元/MWh&#xff0c;预计出现在19: 30。最低日前电价为286.57元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a; 实…

腾讯出了一个新聊天软件M8

众所周知&#xff0c;如今国内互联网&#xff0c;微信和QQ无疑是社交领域的霸主。 下载:https://www.123pan.com/s/BP5A-RW4xh.html 不过&#xff0c;它们也有各自局限性&#xff0c;比如难以结识新朋友、功能过于复杂等。 这让用户产生厌倦&#xff0c;再加上近几年AI、元宇…

标记垃圾,有三种色彩:四千长文带你深入了解三色标记算法

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

SCSS的基本用法

1、声明变量 $ 声明变量的符号 $ 下面这张图左半部分是scss的语法&#xff0c;右半部分是编译后的css。&#xff08;整篇文章皆是如此&#xff09; 2、默认变量 !default sass 的默认变量仅需要在值后面加上 !default 即可。 如果分配给变量的值后面添加了 !default 标志…