【postgresql 基础入门】聚合函数,通用型,统计分析型,多种多样的聚合函数满足数据的大数据的统计分析

聚合函数

专栏内容

  • postgresql内核源码分析
  • 手写数据库toadb
  • 并发编程

个人主页:我的主页
管理社区:开源数据库
座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.

文章目录

  • 聚合函数
  • 一、前言
  • 二、概述
  • 三、语法介绍
  • 四、通用聚集函数
    • 平均值 avg
    • 最大值 max
    • 最小值 min
    • 求和 sum
    • 行数统计 count
    • 字符串连接 string_agg
  • 五、统计类聚集函数
    • 平方和
    • 乘积和
    • 标准差
    • 标准方差
  • 六、总结
  • 七、结尾

一、前言


在数据库管理系统中,SQL(结构化查询语言)的聚集函数扮演着至关重要的角色。它们能够对一组值执行计算,并返回单个值,为数据分析与决策提供了极大的便利。聚集函数不仅简化了复杂的数据处理任务,还使得数据的统计与汇总变得高效且准确。

常见的SQL聚集函数包括求和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)以及计数(COUNT)等。这些函数能够快速地处理大量数据,提取出关键信息,帮助用户更好地了解数据的分布与特征。

随着大数据时代的到来,数据的规模与复杂性不断增加,SQL聚集函数的重要性也日益凸显。它们为数据科学家、分析师以及开发者提供了强大的工具,使得数据的挖掘与分析变得更加深入与精准。因此,深入了解和掌握SQL聚集函数的使用方法,对于提升数据处理能力和优化决策过程具有重要意义。

二、概述


聚集函数把输入的集合,通过计算得到一个单一值,在postgresql 中内建了许多聚集函数,满足常用的统计分析,主要分为以下几类:

  • 通用聚集函数
  • 统计性聚集函数
  • 有序集聚集函数
  • 假想集聚集

在这里我们分享几个经常用到的通用聚集函数 avg, max,min,sum,count,和字符串连接,以及用于分析偏差的聚集函数。

三、语法介绍


一个聚集表达式表示在由一个查询选择的行上应用一个聚集函数。一个聚集函数将多个输入减少到一个单一输出值,例如对输入的求和或平均。一个聚集表达式的语法是下列之一:

aggregate_name (column1 [ , … ] [ order_by_clause ] )
aggregate_name (DISTINCT column1 [ , … ] [ order_by_clause ] )
aggregate_name ( * )

说明

  • 这里aggregate_name是一个聚集函数名称,

  • column1是一个表的列名,一般聚集函数会对每一行进行计算,当指定distinct时,重复值只参与计算一次;

  • 可选order by 子句对指定列进行排序,当然对于max,min 来讲排序是没有意义的,而对于字符串连接来讲,可以指定结果的显示次序;

  • 当输入为 *时,所有列都会参与计算;

  • 大部分聚集函数忽略空输入,这样其中一个或多个表达式得到空值的行将被丢弃;

下面来介绍几个常用的集聚函数。

四、通用聚集函数


这里列举一些常用的聚集函数。

平均值 avg

avg 计算指定列的算术平均值,它可以输入的类型,以及对应的输出类型有:

  • avg ( smallint ) → numeric
  • avg ( integer ) → numeric
  • avg ( bigint ) → numeric
  • avg ( numeric ) → numeric
  • avg ( real ) → double precision
  • avg ( double precision ) → double precision
  • avg ( interval ) → interval

计算所有非空输入值的平均值(算术平均值),可以看到avg内置的求平均函数,适配了各种数值类型;


最大值 max

max 计算非空输入值的最大值;

  • max ( type ) → type 与输入类型相同

type 类型可以是任何数字、字符串、日期/时间或enum类型, 以及inet, interval, money, oid, pg_lsn,tid和任何这些类型的数组。

最小值 min

min 计算非空输入值的最小值;

  • min ( type ) → type 与输入类型相同

type 类型可以是任何数字、字符串、日期/时间或enum类型, 以及inet, interval,money, oid, pg_lsn,tid和任何这些类型的数组。

求和 sum

sum 计算非空输入值的总和;它可以支持以下类型的输入,同时对应输出类型:

  • sum ( smallint ) → bigint
  • sum ( integer ) → bigint
  • sum ( bigint ) → numeric
  • sum ( numeric ) → numeric
  • sum ( real ) → real
  • sum ( double precision ) → double precision
  • sum ( interval ) → interval
  • sum ( money ) → money

avg相比,这里多了一种money类型。

行数统计 count

count计算输入值不为空的输入行的数量, 有两种写法:

  • count ( * ) → bigint
  • count ( column1 ) → bigint

一种是*,它是计算所有行的数量;而另一种传入列名,这时只计算当前列的非空值的行数,如果当前列没有非空值,那么与前一种结果相同。

当然还有一种常见的写法count(1),这里传入常量1,它的结果与第一种写法相同,计算所有行的行数量。

下面通过一个例子来看一下效果:

postgres=# select * from products ;product_id | product_name |  price  | category
------------+--------------+---------+----------2 | shirt        |  202.40 | type23 | cake         |   37.80 | type45 | hat          |   88.40 | type26 | milk         |   19.80 | type41 | iphone       | 8999.01 | type57 | keyboard     |   92.01 | type54 | pencil       |    8.20 | type18 | desk         |  120.00 |
(8 rows)postgres=# select count(1) from products ;count
-------8
(1 row)postgres=# select count(category) from products ;count
-------7
(1 row)postgres=# select count(distinct category) from products ;count
-------4
(1 row)

这里使用列名category统计,就会排除空值行,当然还可以对列的值进行去重distinct, 之后统计实际类型的数量。

字符串连接 string_agg

string_agg连接非空输入值到字符串中,支持两种输入类型:

  • string_agg ( value text, delimiter text ) → text
  • string_agg ( value bytea, delimiter bytea ) → bytea

value是输入的内容,delimiter是分隔符,

第一个值之后的每个值前面都有相应的分隔符(delimiter)(如果它不为空);

postgres=# select string_agg(product_name,',') from products ;string_agg
-------------------------------------------------shirt,cake,hat,milk,iphone,keyboard,pencil,desk
(1 row)

可以看到,经过字符串连接之后,产品名之间按指定分隔符进行连接起来。

五、统计类聚集函数


当做一些简单的统计分析时,可以使用统计学中的公式进行计算,这里只列了几个常用的,通过类似的命名可以查看postgresql帮助文档,已经内置了很多统计类型的聚集函数。

平方和

  • regr_sxx ( Y double precision, X double precision ) → double precision

计算自变量的“平方和” ,计算公式为:sum(X2) - sum(X)2/N.


postgres=# select regr_sxx(product_id,price) from products ;regr_sxx
-------------------69613296.20214999
(1 row)
  • regr_syy ( Y double precision, X double precision ) → double precision

计算因变量的“平方和”,计算公式为: sum(Y2) - sum(Y)2/N.


postgres=# select regr_syy(product_id,price) from products ;regr_syy
----------42
(1 row)

注意,这里的Y 是前面一个输入。

乘积和

  • regr_sxy ( Y double precision, X double precision ) → double precision

计算独立变量乘以因变量的“交叉积和”, ,计算公式为:sum(X*Y) - sum(X) * sum(Y)/N.

标准差

计算输入值的样本标准差;

  • stddev_samp ( numeric_type ) → double precision / numeric

在输入值为real 或 double precision类型时,输出值类型为 double precision,其它数值类型时为 numeric。

postgres=# select stddev_samp(price) from products ;stddev_samp
-------------------3153.530814865639
(1 row)

标准方差

计算输入值的样本方差(样本标准差的平方);

  • var_samp ( numeric_type ) → double precision / numeric

在输入值为real 或 double precision类型时,输出值类型为 double precision,其它数值类型时为 numeric。

六、总结


本文分享了通用类型和统计类型的常用聚集函数,它们经常被使用到,也是数据库中对数据使用的一些常见方式,还有很多类似的聚集函数,可以查看postgresql帮助手册。

七、结尾


非常感谢大家的支持,在浏览的同时别忘了留下您宝贵的评论,如果觉得值得鼓励,请点赞,收藏,我会更加努力!

作者邮箱:study@senllang.onaliyun.com
如有错误或者疏漏欢迎指出,互相学习。

注:未经同意,不得转载!

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

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

相关文章

Linux安装最新版Docker完整教程

参考官网地址:Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统,内核版本为3.10 1.3 安装依赖包 …

MySQL如何创建存储过程

工作中有时候需要自己去创建存储过程,然后调用存储去获得一些数据等,接下来就给大家介绍下MySQL如何创建存储过程。 语法: CREATE PROCEDURE 存储程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …] 过…

区块链技术与数字身份:解析Web3的身份验证系统

在数字化时代,随着个人数据的日益增多和网络安全的日益关注,传统的身份验证系统面临着越来越多的挑战和限制。在这种背景下,区块链技术的出现为解决这一问题提供了全新的思路和解决方案。Web3作为一个去中心化的互联网模式,其身份…

多卡环境 设置某张卡跑某程序

如果要在使用screen命令时指定CUDA设备,正确的方法是在screen命令之前设置CUDA_VISIBLE_DEVICES环境变量。由于screen会启动一个新的shell会话,直接在命令中设置环境变量可能不会按预期工作。因此,你需要先导出环境变量,然后再启动…

在线JSON工具

功能支持 ctrls json格式化游览器本地保存ctrla ctrlc 自动检测选中范围是否是全选,然后按照格式化方式添加到粘贴板中json 粘贴JSON自动格式化json可视化修改json压缩复制json层级折叠json关键key 搜索(自动提示高亮)满足某些近视的可以自行调整字体大小, 并且会游…

【Spring】SpringBoot整合MybatisPlusGernerator,MybatisPlus逆向工程

📝个人主页:哈__ 期待您的关注 在我们写项目的时候,我们时常会因为需要创建很多的项目结构而头疼。项目中的表很多的时候,我们连实体类都创建不完,这时候就需要我们的逆向工程来帮助我们生成我们的框架结构。这些结构…

centos安装使用elasticsearch

1.首先可以在 Elasticsearch 官网 Download Elasticsearch | Elastic 下载安装包 2. 在指定的位置(我的是/opt/zhong/)解压安装包 tar -zxvf elasticsearch-7.12.1-linux-x86_64.tar.gz 3.启动es-这种方式启动会将日志全部打印在当前页面,一旦使用 ctrlc退出就会导…

【华为OD机试C++】删除字符串中出现次数最少的字符

《最新华为OD机试题目带答案解析》:最新华为OD机试题目带答案解析,语言包括C、C++、Python、Java、JavaScript等。订阅专栏,获取专栏内所有文章阅读权限,持续同步更新! 文章目录 描述输入描述输出描述示例代码描述 实现删除字符串中出现次数最少的字符,若出现次数最少的字…

自动驾驶硬件系统- Inertial Measurement Unit (IMU)

自动驾驶硬件系统- Inertial Measurement Unit (IMU) 附赠自动驾驶学习资料和量产经验:链接 惯性测量单元(Inertial measurement unit,简称 IMU),是测量物体三轴姿态角及加速度的装置。一般IMU包括三轴陀螺仪及三轴加速度计,部分…

小米汽车:搅动市场的鲶鱼or价格战砧板上的鱼肉?

3月28日晚,备受关注的小米汽车上市发布会召开,小米集团董事长雷军宣布小米SU7正式发布。小米汽车在带飞股价的同时,二轮订购迅速售尽。 图一:小米集团股价 雷军口中“小米汽车迈出的第一步,也是人生最后一战的开篇”&a…

STC8H8K64U 库函数学习笔记 —— 流水灯

STC8H8K64U 库函数学习笔记 —— 流水灯 环境说明: 芯片:STC8H8K64U 软件: KeilC51 μVersion V5.38.00STCAI-ISP (V6.94) 库文件说明:我将依赖的库文件统一放置到工程下的 lib 目录中,所以,代码中的包含指…

蓝桥杯 经验技巧篇

1. 注意事项 👨‍🏫 官方通知 👨‍🏫 资料文档 时间:4月13日 9:00~13:00 (时长 4小时)物品 准考证(赛前一周开放下载,自行打印)学生证身份证笔、水、外套&a…

知识推理技术解析与实战

目录 一、引言二、知识推理基础知识表示方法本体论语义网络图形数据库 推理机制概述演绎推理归纳推理类比推理 实践代码示例 三、知识推理的核心技术自动推理系统规则引擎推理算法 知识图谱的运用构建知识图谱知识推理与查询 推理算法深度分析转导推理逻辑推理概率推理 实践代码…

关键节点组挖掘(附Python实现)

一、实验内容简介 该实验主要利用基于度的排序和基于投票策略的排序分别挖掘出一组重要节点作为种子节点,然后在给定的网络中传播,一直到稳态,然后统计感染的规模NR。最后通过比较两种方法的感染规模给出相应的评价,给出不同感染…

合资红利耗尽,海外喜忧参半:上汽2023有点“遗憾”

作者 |老缅 编辑 |德新 3月29日,上汽集团发布2023年全年财报。 数据显示,2023年上汽集团实现总营收7447.05亿元,同比增加0.09%;归属于上市公司股东的净利润141.06亿元,同比减少12.48%;基本每股收益1.226元…

【架构艺术】变更元信息分析框架设计

在变更风险防控领域,对于线上变更元信息的分析是非常重要的一部分,这是因为,只有理解了变更元信息,结合自主定制的变更规范,才能够知道具体的变更风险在哪里。不同的变更风险防御能力,实现的思路可能是不同…

CSS - 你实现过宽高自适应的正方形吗

难度 难度级别:中高级及以上 提问概率:80% 宽高自适应的需求并不少见,尤其是在当今流行的大屏系统开发中更是随处可见,很显然已经超越了我们日常将div写死100px这样的范畴,那么如何实现一个宽高自适应的正方形呢?这里提出两种实现方案。…

面试题Spring、SpringMVC、SpringBoot、SpringCloud

每日面试题学习 目录 前言 一、Spring是什么? 二、SpringMVC是什么? 三、SpringBoot是什么? 四、SpringCloud是什么? 五、什么是SSM? 面试常问 1.Spring和SpringMVC的区别 2.SpringMVC跟SpringBoot的区别 3.SpringBoot…

自动化脚本代码appium+pytest+adb

pytest多线程与多设备并发appium​​​​​​​ 使用adb获取应用的内存和CPU使用情况 import pytest import subprocess# 测试用例:检查应用的内存使用情况 def test_memory_usage():package_name com.example.myappmemory_info subprocess.check_output([adb, …

景区云旅游/视频慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…