SQL | 汇总数据

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.rhkb.cn/news/89167.html

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

相关文章

开源,微信小程序 美食便签地图(FoodNoteMap)的设计与开发

目录 0 前言 1 美食便签地图简介 2 美食便签地图小程序端开发 2.1技术选型 2.2前端UI设计 2.3主页界面 2.4个人信息界面 2.5 添加美食界面 2.6美食便签界面 2.8 美食好友界面 2.9 美食圈子界面 2.10 子页面-店铺详情界面 2.11 后台数据缓存 2.12 订阅消息通知 2.1…

SpringBoot第36讲:SpringBoot集成连接池 - 集成数据库Druid连接池

SpringBoot第36讲&#xff1a;SpringBoot集成连接池 - 集成数据库Druid连接池 上文介绍默认数据库连接池HikariCP&#xff0c;本文是SpringBoot第36讲&#xff0c;主要介绍SpringBoot集成阿里开源的Druid连接池的实践; 客观的来说&#xff0c;阿里Druid只能说是中文开源中 功能…

excel填数据转json格式

定制化比较严重&#xff0c;按需更改 excel文件如下 代码 # -*- coding: utf-8 -*- import oss2 import shutil import sys import xlwt import xlrd import json from datetime import datetime, timedeltafile1 "C:\\Users\\cxy\\Desktop\\generate.xls" #打开表…

OCP China Day 2023:五大社区齐聚,加速开源开放创新与落地

8月10日&#xff0c;2023年开放计算中国社区技术峰会&#xff08;OCP China Day 2023&#xff09;在北京举行。智慧时代&#xff0c;计算多元化、应用多样化、技术复杂化正驱动数据中心新一轮变革&#xff0c;开源开放社区已成为推动数据中心持续创新的重要力量&#xff0c;通过…

多线程与高并发--------线程池

线程池 一、什么是线程池 在开发中&#xff0c;为了提升效率的操作&#xff0c;我们需要将一些业务采用多线程的方式去执行。 比如有一个比较大的任务&#xff0c;可以将任务分成几块&#xff0c;分别交给几个线程去执行&#xff0c;最终做一个汇总就可以了。 比如做业务操…

Maven进阶2 -- 私服(Nexus)、私服仓库分类、资源上传和下载

目录 私服是一台独立的服务器&#xff0c;用于解决团队内部的资源共享与资源同步问题。 1.Nexus Nexus是sonatype公司的一款maven私服产品。 下载地址 启动 nexus.exe /run nexus 访问 & 登录 2.私服仓库分类 3.资源上传和下载 本地仓库上传和访问资源需要进行配置。…

SpingBoot-Vue前后端——实现CRUD

目录​​​​​​​ 一、实例需求 ⚽ 二、代码实现 &#x1f3cc; 数据库 &#x1f440; 后端实现 &#x1f4eb; 前端实现 &#x1f331; 三、源码下载 &#x1f44b; 一、实例需求 ⚽ 实现一个简单的CRUD&#xff0c;包含前后端交互。 二、代码实现 &#x1f3cc; 数…

Java SPI机制

Java SPI机制 java的spi就是一种服务提供发现机制&#xff0c;在一方制定好接口规范后&#xff0c;通过spi的机制可以它的子实现类进行服务发现&#xff0c;以及加载它的子实现类&#xff0c;通过这种机制&#xff0c;让我们在引入第三方库时&#xff0c;不用讲第三方库中的类…

管易云和金蝶云星空接口打通对接实战

管易云和金蝶云星空接口打通对接实战 对接系统管易云 管易云是上海管易云计算软件有限公司旗下的专注提供电商企业管理软件服务的品牌&#xff0c;总部位于中国上海张江高科技产业园区。管易云旗下拥有管易云C-ERP、EC-OMS、EC-WMS、B2C/B2B/BBC/微商城开发、PDA无纸化仓储解决…

TypeScript项目中Axios的封装

目录 前言 一、axios中的常见类型 1. AxiosInstance 2. AxiosRequestConfig 3. AxiosResponse 4. AxiosError 二、axios封装步骤 三、封装后的完整代码 1. 基础封装 2. 高级封装 前言 为了实现统一的网络请求处理和管理&#xff0c;在日常开发中我们常常封装 axios&…

一个步骤跳过 Unity 启动Logo | 多平台适用 | 官方API支持

前言【Unity实战篇 】 | 一个步骤跳过 Unity Logo 界面 | 多平台适用 | 官方API支持使用方法核心 API1. RuntimeInitializeOnLoadMethodAttribute2. SplashScreen效果展示总结前言 众所周知,使用Unity引擎打包的工程在启动时都带有Unity的默认启动Logo。这个问题可以通过购买U…

Codeforces Round 893 (Div. 2)ABC

Codeforces Round 892 (Div. 2) 目录 A. United We Stand题目大意思路代码 B. Olya and Game with Arrays题目大意思路代码 C. Another Permutation Problem题目大意思路代码 A. United We Stand 题目大意 给你一个数组&#xff0c;把这个数组分成两个数组a和b&#xff0c;使…

大数据-玩转数据-Flink RedisSink

一、添加Redis Connector依赖 具体版本根据实际情况确定 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-connector-redis_2.11</artifactId><version>1.1.5</version> </dependency>二、启动redis 参…

使用KETTLE工具在Oracle和Dm8之间迁移数据

oracle 代码测试数据 CREATE TABLE PRODUCT_CATEGORY ( PRODUCT_CATEGORYID NUMBER(11,0) NOT NULL , NAME VARCHAR2(255) NOT NULL ENABLE, PRIMARY KEY (PRODUCT_CATEGORYID) )INSERT ALL into PRODUCT_CATEGORY(PRODUCT_CATEGORYID, NAME)VALUES(2,国学) into PRODUCT_CATEG…

Qt开发技术:Q3D图表开发笔记:Q3DSurface三维曲面图介绍、Demo以及代码详解

前言 qt提供了q3d进行三维开发&#xff0c;虽然这个框架没有得到大量运用也不是那么成功&#xff0c;性能上也有很大的欠缺&#xff0c;但是普通的点到为止的应用展示还是可以的。   其中就包括华丽绚烂的三维图表&#xff0c;数据量不大的时候是可以使用的。   前面介绍了…

win10电脑右下角不显示电脑图标,但是能正常上网,怎么解决?

一、问题描述 win10系统更新后&#xff0c;电脑右下角不显示小电脑图标&#xff0c;但是能正常上网&#xff0c;而且用命令测试时显示的是192打头的网址。 二、解决方法 运行命令提示符窗口&#xff0c;在命令提示符中输入&#xff1a;netsh winsock reset&#xff08; 如果提示…

学习pytorch 3 tensorboard的使用

tensorboard的使用 1. 安装2. add_scalar 查看函数图形3. 查看结果4. add_image() 查看训练步骤中间结果的图片 1. 安装 pytorch conda环境 pip install tensorboard pip install opencv-python2. add_scalar 查看函数图形 常用来查看 train val loss等函数图形 from torch…

第57步 深度学习图像识别:CNN可视化(Pytorch)

基于WIN10的64位系统演示 一、写在前面 由于不少模型使用的是Pytorch&#xff0c;因此这一期补上基于Pytorch实现CNN可视化的教程和代码&#xff0c;以SqueezeNet模型为例。 二、CNN可视化实战 继续使用胸片的数据集&#xff1a;肺结核病人和健康人的胸片的识别。其中&…

Java整合Selenium录制视频

捕捉视频 有时候我们未必能够分析故障只需用日志文件或截图的帮助。有时捕获完整的执行视频帮助。让我们了解如何捕捉视频。 我们将利用Monte媒体库的执行相同。 配置 第1步&#xff1a;导航到URL下载屏幕记录JAR&#xff0c;如下图所示。 http://www.randelshofer.ch/monte…

day24-106.从中序与后序遍历序列构造二叉树

106.从中序与后序遍历序列构造二叉树 力扣题目链接(opens new window) 根据一棵树的中序遍历与后序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如&#xff0c;给出 中序遍历 inorder [9,3,15,20,7]后序遍历 postorder [9,15,7,20,3] 返回如下的二叉树&am…