当前位置: 首页 > news >正文

PostgreSQL的聚集函数

在日常工作中,无论是处理销售数据、分析用户行为,还是统计气象信息,我们常常需要从大量数据中提取关键信息。

在PostgreSQL里,聚集函数就能帮你搞定这些事。它能从多行数据中计算出一个结果,如: 

count(计数): 能数出有多少条记录

sum(和) :能算出数值的总和

avg(均值) :能得出平均值

max(最大值) 和 min(最小值):能找出最大值和最小值。

假设查询天气表weather记录城市的最低温度temp_low。

SELECT max(temp_lo) FROM weather;

一.WHERE子句进行条件筛选

WHERE子句的作用是在聚集计算之前筛选出符合条件的行,而聚集函数的结果是在行筛选之后才计算出来的。

SELECT city FROM weatherWHERE temp_low = (SELECT max(temp_low) FROM weather);

注意:不能直接在WHERE子句里用max(temp_low)。

二.GROUP BY分组统计

当数据量大且包含多种分类时,GROUP BY子句就派上用场了。

比如,我们想看看每个城市的天气记录数量以及城市的最低温度中最高值,就可以这样写:

​​​​​​​

SELECT city, count(*), max(temp_low)FROM weatherGROUP BY city;

把天气表数据按城市分类,然后将分类数据进行统计,显示每个城市有多少条记录,以及每个城市最低温度中的最高值。

还可以用HAVING子句来过滤上面分组后的数据。比如只看每个城市最低温度中最高值小于10的城市,可以在上面语句上加having条件,如下

​​​​​​​

SELECT city, count(*), max(temp_low)FROM weatherGROUP BY cityHAVING max(temp_low) < 10;

分类统计之后,再把不符合要求的分类结果去掉。

注意:where和having的区别。where 是在分组和聚集计算之前筛选数据,而having是在分组和聚集计算之后筛选分组。

三.FILTER精细化聚集控制

PostgreSQL还提供了一个很实用的功能——filter。可以让聚集函数只对符合条件的行进行计算。

比如统计每个城市中最低温度小于10的数量,但又不影响其他聚集函数的计算,可以这样写:

​​​​​​​

SELECT city, count(*) FILTER (WHERE temp_low < 10), max(temp_low)FROM weatherGROUP BY city;

为count函数加了一个“过滤器”,只即使最低温度小于10的行,而max函数还是对所有记录计算,实现更加灵活的精细化控制。

最后

PostgreSQL的聚集函数是一个强大的工具。通过合理使用WHERE、GROUP BY、HAVING和FILTER,可以精确地控制数据的筛选、分组和统计过程,让数据为我们更好地服务。

掌握这些技巧能让我们在数据处理的道路上更加得心应手。

http://www.xdnf.cn/news/711469.html

相关文章:

  • Nest全栈到失业(三):半小时图书管理系统-User
  • Ubuntu 22.04 上安装 PostgreSQL(使用官方 APT 源)
  • CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!
  • 收集飞花令碎片——C语言(数组+函数)
  • 酷派Cool20/20S/30/40手机安装Play商店-谷歌三件套-GMS方法
  • 小程序为什么要安装SSL安全证书
  • LeetCode 55 45:跳跃游戏与跳跃游戏 II - 贪心算法详解
  • 前端开发中 <> 符号解析问题全解:React、Vue 与 UniApp 场景分析与解决方案
  • 题目 3298: 蓝桥杯2024年第十五届决赛真题-兔子集结
  • WPF log4net用法
  • STM32 AD单通道与多通道实战指南
  • 【QT】理解QT的“元对象系统”
  • 【Tips】关于PCI和PCIe的配置空间差异和io/memory io读写
  • 【CF】Day69——⭐Codeforces Round 897 (Div. 2) D (图论 | 思维 | DFS | 环)
  • Redis--基础知识点--28--慢查询相关
  • 【ConvLSTM第二期】模拟视频帧的时序建模(Python代码实现)
  • CppCon 2014 学习第4天:Transactional Language Constructs for C++ TS(未进入到标准)
  • RDS PostgreSQL手动删除副本集群副本的步骤
  • 58同城C++开发面试题及参考答案
  • OpenCV CUDA模块结构分析与形状描述符------计算指定阶数的矩(Moments)所需的总数量函数:numMoments
  • json转成yolo用的txt(json中没有宽高,需要自设宽高的)
  • Mysql数据库 索引,事务
  • 数据库 | 时序数据库选型
  • 物联网常用协议Modbus、CAN、BACnet介绍
  • UniApp X:鸿蒙原生开发的机会与DCloud的崛起之路·优雅草卓伊凡
  • EasyVoice:开源的文本转语音工具,让文字“开口说话“
  • C语言学习笔记四---V
  • Spring官方的在线教程也可以用中文观看了
  • js如何把json对象格式数据快速字符串
  • 长安链合约操作 查询合约命令解析