聚集函数
和大多数其它关系数据库产品一样,PostgreSQL 支持聚集函数。一个聚集函数从多个输入行中计算出一个结果。比如,我们有在一个行集合上计算 count(数目), sum(总和), avg(均值), max(最大值), min(最小值)的函数。
比如,我们可以用下面的语句找出所有低温中的最高温度:
SELECT max(temp_lo) FROM weather; max
-----
46
(1 row)如果我们想知道该读数发生在哪个城市,可能会用:
SELECT city FROM weather WHERE temp_lo = max(temp_lo); -- 错!不过这个方法不能运转,因为聚集函数 max 不能用于 WHERE 子句中。存在这个限制是因为 WHERE 子句决定哪些行可以进入聚集阶段;因此它必需在聚集函数之前计算。不过,我们可以用其它方法实现这个目的;这里我们使用子查询:
SELECT city FROM weather
WHERE temp_lo = (SELECT max(temp_lo) FROM weather); city
---------------
San Francisco
(1 row)这样做是可以的,因为子查询是一次独立的计算,它独立于外层查询计算自己的聚集。
聚集同样也常用于 GROUP BY 子句。比如,我们可以获取每个城市低温的最高值:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city; city | max
---------------+-----
Hayward | 37
San Francisco | 46
(2 rows)这样每个城市一个输出。每个聚集结果都是在匹配该城市的行上面计算的。我们可以用 HAVING 过滤这些分组:
SELECT city, max(temp_lo)
FROM weather
GROUP BY city
HAVING max(temp_lo) < 40; city | max
---------+-----
Hayward | 37
(1 row)这样就只给出那些 temp_lo 值曾经有低于 40 度的城市。最后,如果我们只关心那些名字以"S"开头的城市,我们可以用:
SELECT city, max(temp_lo)
FROM weather
WHERE city LIKE 'S%'
GROUP BY city
HAVING max(temp_lo) < 40;语句中的 LIKE 执行模式匹配,在节9.7里有解释。
理解聚集和 SQL 的 WHERE 和 HAVING 子句之间的关系非常重要。WHERE 和 HAVING 的基本区别如下:WHERE 在分组和聚集计算之前选取输入行(它控制哪些行进入聚集计算),而 HAVING 在分组和聚集之后选取输出行。因此,WHERE 子句不能包含聚集函数;因为试图用聚集函数判断那些行将要输入给聚集运算是没有意义的。相反,HAVING 子句总是包含聚集函数。当然,你可以写不使用聚集的 HAVING 子句,但这样做没什么好处,因为同样的条件可以更有效地用于 WHERE 阶段。
在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算。
分享到:
相关推荐
- **聚合函数**: - AVG:计算平均值。 - COUNT:统计数量。 - MAX:获取最大值。 - MIN:获取最小值。 - SUM:求和。 - **数学函数**: - SIN:计算正弦值。 - COS:计算余弦值。 以上就是从给定的文件...
1. **聚合函数** - **计数(Count)**: `COUNT(*)`统计行数,`COUNT(column)`统计指定列非空值的数量。 - **最大值(Max)**: `MAX(column)`返回指定列的最大值。 - **最小值(Min)**: `MIN(column)`返回指定列的...
在SQL Server中,聚合函数是用于对一组值进行计算并返回单个值的函数,例如SUM、AVG、COUNT、COUNT(*)、MAX和MIN。这些函数在数据分析和报表制作中非常常见,但它们都有一个限制,那就是它们只能处理数值类型的数据...
在SQL查询中,分组聚合函数的语法结构如下: ```sql SELECT [column,] group_function(column), ... FROM table [WHERE condition] GROUP BY column HAVING condition [ORDER BY column]; ``` 这里,`WHERE`子句...
它支持大部分标准SQL语法,但也有自己的一些特性和限制。以下是对SQLite支持的SQL语法的详细讲解,同时也将指出一些SQLite不支持的SQL语句。 一、创建与管理数据库 在SQLite中,可以使用`CREATE DATABASE`命令创建...
它可能会详细解释如何从一个或多个表中选择、过滤和排序数据,以及如何使用聚合函数(如SUM、AVG、COUNT)进行数据统计。 《SQL 高级进阶.doc》:高级主题可能包括子查询、联接(INNER JOIN、LEFT JOIN、RIGHT JOIN...
- 在SQL中,像MySQL、PostgreSQL这样的数据库系统支持用户自定义函数(UDF),包括聚合函数。这通常涉及编写存储过程或使用特定的语法定义新的函数。 - 在编程语言如Python中,可以使用`functools.reduce()`或...
SQL语法优化大全主要涵盖以下几个核心知识点: 1. **查询优化基础**:理解SQL的执行过程,包括解析、编译、优化和执行阶段。优化器在执行查询时会生成执行计划,通过索引、连接顺序和操作优化来提高查询速度。 2. ...
最后,SQL查询语句是数据处理的核心,包括基本查询、联接查询、子查询、聚合函数等,这些都是理解和编写高效SQL查询的基础。 【描述】中提到的“IBM Informix SQL 指南”是官方文档,它详细介绍了DB2 SQL语言的最新...
本文将详细介绍 SQL 中的分组查询和聚合函数,包括它们的基本概念、语法以及实际应用示例。 #### 二、分组查询(GROUP BY) 分组查询是 SQL 中一种常用的查询技术,它允许用户基于一个或多个字段将结果集分割成不同...
3. 分组与聚合函数:GROUP BY用于分组,聚合函数如COUNT(), SUM(), AVG(), MAX(), MIN()对分组进行计算。 ```sql SELECT column1, COUNT(column2) FROM table GROUP BY column1; ``` 4. 排序与分页:ORDER BY用于...
5. **聚合函数**:如`COUNT()`计算记录数,`SUM()`求和,`AVG()`计算平均值,`MAX()`和`MIN()`分别找出最大和最小值。 在SQL语法方面,有以下几个基础概念: 1. **SELECT语句**:用于从表中选取数据,例如`SELECT ...
- **聚合函数**:`COUNT(), SUM(), AVG(), MAX(), MIN()` - **连接查询**:`JOIN, INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN` 5. 删除数据: - **删除记录**:`DELETE FROM 表名 WHERE 条件;` 6. 子...
3. 聚合函数:COUNT、SUM、AVG、MAX、MIN等,可对一组值进行计算。 4. 分组和排序:GROUP BY用于按列分组,ORDER BY用于结果集排序。 5. 连接查询:JOIN操作将多个表的数据合并在一起,如INNER JOIN、LEFT JOIN、...
《SQL语法手册》是针对Oracle数据库系统的一本实用教程,非常适合初学者进行深入学习。SQL,全称为Structured Query Language,即结构化查询语言,是用于管理和处理关系数据库的标准语言。Oracle作为世界上最流行的...
除了基本操作,SQL还有许多其他功能,如JOIN(连接多个表)、子查询(在查询中嵌套查询)、聚合函数(如COUNT、SUM、AVG、MAX和MIN)以及视图(虚拟表)等。在实际应用中,还会涉及到事务处理、存储过程、触发器等...
本篇文章将深入探讨如何使用聚合函数Pivot和Unpivot来实现这一目标,特别是针对SQL Server数据库。 首先,让我们了解什么是行转列。行转列就是将表格中的某列值变为新的列名,而原本的行数据则对应到这些新列中。举...
本文将对SQL语法进行一个基本总结,包括增删改查、聚合函数、分组、分页和排序等关键字的书写顺序与执行顺序,以及这些关键字在实际应用中的意义。 首先,查询语句是SQL操作中最基本的部分,其关键字书写顺序为:...