❶ 第十三章 sql聚合函数 XMLAGG
一个聚合函数,它创建一个串接的值字符串。
XMLAGG 聚合函数返回由 string-expr 中的所有值组成的串接字符串。
返回值的数据类型为 VARCHAR ,默认长度为 4096 。
以下两个示例都返回相同的单个值,即 Sample.Person 表的 Home_State 列中列出的所有值的串联字符串。
请注意,此连接字符串包含重复值。
返回值中将省略 string-expr 为NULL的行。如果至少返回一个非空字符串值,则从返回值中省略 string-expr 为空字符串( '' )的行。如果唯一非空的 string-expr 值是空字符串( '' ),则返回值是单个空字符串。
XMLAGG 不支持数据流字段。为 string-expr 指定流字段会导致 SQLCODE-37 。
XMLAGG 的一个常见用法是标记列中的每个数据项。这是通过组合 XMLAGG 和 XMLELEMENT 来实现的,如下例所示:
这将产生如下所示的输出字符串:
XMLAGG 函数将来自多行的表列的值连接到单个字符串中。因为在计算所有聚合字段之后,将逐个从句应用于查询结果集,所以逐个不能直接影响该字符串中的值序列。在某些情况下, XMLAGG 结果可能会按顺序显示,但不应依赖此排序。给定聚合结果值中列出的值无法显式排序。
下面的示例创建在 Sample.Person 表的 FavoriteColors 列中找到的所有不同值的串联字符串。因此,对于 ALL_COLLES 列,每行都有相同的值。请注意,虽然有些行的 FavoriteColors 为空值,但该值不包括在连接的字符串中。数据值以内部格式返回。
下面的示例返回以 “A” 开头的 Home_State 值的串联字符串。它返回不同的 Home_State 值(不同的 Home_State );与不同的 Home_City 值对应的 Home_State 值(与( Home_City ) Home_State 不同),其中可能包括 Home_City 的一个唯一NULL;以及所有 Home_State 值:
下面的示例为每个州创建在 Home_City 列中找到的所有不同值的串联字符串。同一州的每一行都包含该州所有不同城市值的列表:
以下示例使用 %AFTERHAVING 关键字。它为每个包含至少一个满足 HAVING 子句条件(以 “C” 或 “K” 开头的名称)的 Name 值的 Home_State 返回一行。第一个 XMLAGG 函数返回由该州的所有名称组成的连接字符串。第二个 XMLAGG 函数返回仅由满足 HAVING 子句条件的名称组成的连接字符串:
对于以下示例,假设我们有下表 AutoClub :
❷ 关于sql聚集函数的正确描述是
SQL允许定义函数、过程和方法。定义可通过SQL的有关过程的组件,也可以通过外部的程序设计语言,如Java,C或C++。SQL标准所定义的语法,与大多数数据库实现的自身的非标准版本的语法不同。函数和过程允许“业务逻辑”作为存储过程记录在数据库中,并在数据库中执行。
求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和。语法如下。
SELECT SUM(column_name)
FROM table_name
说明:SUM()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。
(2)sql聚集函数中扩展阅读:
理解聚集和SQL的 WHERE 以及 HAVING 子句之间的关系对我们非常重要。 WHERE 和 HAVING 的基本区别如下: WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。
相反,HAVING 子句总是包含聚集函数。 (严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
❸ 第十二章 SQL聚合函数 VARIANCE, VAR_SAMP, VAR_POP
返回数据集统计方差的聚合函数。
这些函数返回 NUMERIC 数据类型,除非表达式是数据类型 DOUBLE 。
如果 expression 为 DOUBLE ,则返回 DOUBLE 。
这三个方差聚合函数在丢弃 NULL 值后返回表达式值的统计方差。
也就是说,从数据集的平均值变化的量,表示为一个正数。
返回值越大,值的数据集的变化就越大。
SQL还提供聚合函数来返回对应于每个方差函数的标准偏差。
在这种统计差异的推导过程中有一些细微的差异:
方差计算为:
VAR_POP 的计算是:
这些方差聚合函数可以在引用表或视图的 SELECT 查询或子查询中使用。
它们可以在 SELECT 列表或 HAVING 子句中与普通字段值一起出现。
这些方差聚合函数不能在WHERE子句中使用。
它们不能在 JOIN 的 ON 子句中使用,除非 SELECT 是子查询。
这些方差聚合函数返回数据类型NUMERIC的值,精度为 36 ,刻度为 17 ,除非表达式是数据类型 DOUBLE ,在这种情况下,函数返回数据类型 DOUBLE 。
这些方差聚合函数通常应用于具有数值的字段或表达式。
它们将非数值值(包括空字符串( " ))计算为零( 0 )。
这些方差聚合函数忽略数据字段中的 NULL 值。
如果查询没有返回行,或者返回的所有行的数据字段值为 NULL ,则返回 NULL 。
与所有聚合函数一样,统计方差函数可以采用一个可选的 DISTINCT 子句。
方差( DISTINCT col1 )返回那些不同(唯一)的 col1 字段值的方差。
方差( DISTINCT BY(col2) col1 )返回记录中col1字段值的方差,其中col2值是不同的(唯一的)。
但是请注意,不同的col2值可能包含一个单独的NULL值。
与所有聚合函数一样,方差函数总是返回数据的当前状态,包括未提交的更改,而不管当前事务的隔离级别如何。
下面的示例使用方差返回 sample.employee 中雇员年龄的方差,以及由一个或多个雇员表示的不同年龄的方差:
下面的示例使用 VAR_POP 返回 sample.employee 中雇员年龄的总体差异,以及由一个或多个雇员表示的不同年龄的差异:
❹ sql 语句中那些是聚合函数
常见聚合函数,max(最大)、min(最小)、sum(求和)、avg(平均)等,
示例如下,
1、创建测试表,
create table test_group(id number, value number);
❺ SQL——聚集函数
聚集函数 是以值是一个集合(集或者多重集)为输入、返回单个值得函数。SQL提供了五个固有聚集函数。
平均值 :avg
最小值 :min
最大值 :max
总和 :sum
计数 :count
以上五个固有聚集函数都是属于基本聚集
示例:
其他基本聚集使用形式差不多。
如果希望将聚集函数作用在单个元组集上,也希望作用到一组元组集上,此时可以利用group by子句来实现。
group by 子句作用: 对给出的一个或多个属性来构造分组,将属性上取值相同的元组分到同一组中。
示例 :
值得注意的是, 当SQL查询使用分组的时候,需要保证出现在select语句中但没有被聚集的属性只能是出现在group by 子句中的那些属性。换句话说,任何 没有出现 在group by子句中的属性如果出现在select子句中的话,它 只能出现在聚集函数的内部 ,否则这样的查询就是错误的,例如:
不过令我哭笑不得是,呃……,竟然运行没有报错[捂脸.jpg],然后仔细观察了以下,原因是id是没有被聚集,所以是属于查询错误,
看下面的结果,类别biology的id只有10211,其实还有另外一个。在分组计算中只输出一个元组,这样是无法确定选择哪一个id作为输出,下一次运行结果id值可能为其他值。[如果你有什么新发现,望告知]
有时候限定分组条件比对元组限定条件更有用。比如我们只对工资超过15000某一个系感兴趣。该条件并不针对某个元组,而是针对group by子句构成的分组。即是说,having子句是在分组之后才生效的,可以使用聚集函数。例如:
注意: 与select子句的情况类似,任何出现在having子句中,但没有被聚集的属性必须出现在group by子句中,否则查询就被当成是错误的。
包含聚集、group by 或者having子句的查询的含义可通过下述操作序列定义:
1、根据from子句计算出一个关系
2、如果出现where子句,where子句的谓词将应用到from子句的结果上
3、如果出现group by子句,满足where子句的元组通过group by子句形成分组。如果没有
group by子句,满足where谓词的整个元组集被当做一个分组
4、如果出现having子句,他将应用到每个分组上;不满足having子句谓词的分组将被抛弃。
5、select子句利用剩下的分组产生出查询结果中的元组,即每个分组上应用聚集函数来得到单个关系元组
空值的出现对聚集运算带来了麻烦,例如下列句子:
当instructor关系有些元组在salary属性的值为空,则在查询待求和的值中就包含了空值。SQL标准并不认为总和本身为null,而是认为sum运算符应 忽略 输入中的null值(因为算术表达式如果有null,那么结果为null)。
所以,聚集函数根据以下原则处理空值:
除了count(*)外,所有的聚集函数都忽略输入集合中的空值。由于空值被忽略,可能会造成参加聚集函数的输入值集合为空集。规定空集的count运算值为0,其他所有聚集运算在输入为空集的情况下返回一个空值。
处理布尔值的聚集函数:some 和every。
从字面意义上就可以知道,some是只要满足其中任意一个条件即可,而every则是所有条件都要满足,比如说1=some(集合A),若A={1,2,3},则为真,若A={0,2,3}则为假,又如1>some(集合A),结果分别为假、真。
例如:
❻ sql中常用的聚合函数有哪些
聚合函数是对一组值执行计算并返回单一的值的函数,它经常与SELECT语句的GROUP BY子句一同使用,SQL SERVER 中具体有哪些聚合函数呢?我们来一一看一下:
1. AVG 返回指定组中的平均值,空值被忽略。
例:select prd_no,avg(qty) from sales group by prd_no
2. COUNT 返回指定组中项目的数量。
例:select count(prd_no) from sales
3. MAX 返回指定数据的最大值。
例:select prd_no,max(qty) from sales group by prd_no
4. MIN 返回指定数据的最小值。
例:select prd_no,min(qty) from sales group by prd_no
5. SUM 返回指定数据的和,只能用于数字列,空值被忽略。
例:select prd_no,sum(qty) from sales group by prd_no
6. COUNT_BIG 返回指定组中的项目数量,与COUNT函数不同的是COUNT_BIG返回bigint值,而COUNT返回的是int值。
例:select count_big(prd_no) from sales
7. GROUPING 产生一个附加的列,当用CUBE或ROLLUP运算符添加行时,输出值为1.当所添加的行不是由CUBE或ROLLUP产生时,输出值为0.
例:select prd_no,sum(qty),grouping(prd_no) from sales group by prd_no with rollup
8. BINARY_CHECKSUM 返回对表中的行或表达式列表计算的二进制校验值,用于检测表中行的更改。
例:select prd_no,binary_checksum(qty) from sales group by prd_no
9. CHECKSUM_AGG 返回指定数据的校验值,空值被忽略。
例:select prd_no,checksum_agg(binary_checksum(*)) from sales group by prd_no
10. CHECKSUM 返回在表的行上或在表达式列表上计算的校验值,用于生成哈希索引。
11. STDEV 返回给定表达式中所有值的统计标准偏差。
例:select stdev(prd_no) from sales
12. STDEVP 返回给定表达式中的所有值的填充统计标准偏差。
例:select stdevp(prd_no) from sales
13. VAR 返回给定表达式中所有值的统计方差。
例:select var(prd_no) from sales
14. VARP 返回给定表达式中所有值的填充的统计方差。
例:select varp(prd_no) from sales
❼ SQL Server中的聚合函数有哪些
SQL Server中的聚合函数有:
1.count() 所有记录数
2.count(*)所有非null记录数
3.avg() 某一列平均值
4.min() 某一列最小值
5.max() 某一列最大值
6.sum() 某一列总和
使用方法:
1. SELECT COUNT(字段1) FROM 表A 统计字段1在表A中出现的次数
2. SELECT 学号,SUM(各科成绩) FROM student GROUP BY 学号 用来根据统计学生的总成绩
❽ sql聚合函数有哪些
聚集函数
和大多数其它关系数据库产品一样,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
检查的行进行分组和聚集计算。