数据库聚集函数
A. 数据库聚合函数count和count的区别
count 是用于统计查询结果的个数,属于聚合函数。
可以通过以下方面进行了解:
利用临时表进行测试
sql">withtbas
(
select1nfromalunionall
select1nfromalunionall
selectnullnfromalunionall
select2nfromalunionall
select3nfromal
)
1, 获取查询结果总行数
selectcount(*)fromtb;--5
由tb数据可见,tb中共有5条数据。
2,查询非null字段的行数
selectcount(n)fromtb;--4
该语句查询字段n不为null的总数量,由tb可见,n有一行为null,所以结果为4.
需要注意,若n为非null字段,查询总数时,使用count(*) 比 count(n)速度要快。
原因是count(字段)在统计时,若字段为null,计数不加。若字段不是null,计数+1.
3, 统计非空字段的非重复的内容数量
selectcount(distinctn)fromtb;--3
由于count(n)为获取非null字段数量。distinct为去掉重复值。所以,此结果为先去掉n的重复值再统计。
4,计算字段的非重复数量
selectcount(distinctnvl(n,4)fromtb;--5
先提供null值为一个n中不存在的值,然后去掉重复值进行统计。
效果等同于
selectcount(distinctn)+1fromtb;
B. 聚集函数的介绍
和大多数其它关系数据库产品一样, PostgreSQL 支持聚集函数。 一个聚集函数从多个输入行中计算出一个结果。 比如,我们有在一个行集合上计算 count(数目), sum(和),avg(均值), max(最大值)和min(最小值)的函数。
C. 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 检查的行进行分组和聚集计算。
D. 在数据库中什么叫聚集
按照字面理解就差不多了,虽不是严谨的定义,但如下理解也够用了。
聚集就是汇总一批细节数据,形成一个粗犷数据,说得有营养点儿,称作“浓缩”也凑乎。
与之连用的是聚集函数,SQL标准提到了五个,分别是count、sum、avg、min、max,其中count就是不管细节的各条记录是什么样子,给点个记录总数,另外四个也是不管精致的数据是什么,求出笼统的总和、算术平均值、最小值、最大值,有的数据库还扩充了标准方差、协方差等聚集函数以支持更多的分析需求。
E. 数据库查询,关于聚合函数 max()的用法。
MAX()/MIN()是指SQL中的最大/最小值函数
因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组
而TNAME、DNAME和TSEX的数据都没有进行任何分组,因此SELECT语句没有逻辑意义
MAX()和MIN()函数不仅可以作用于数值型数据,也可以作用于字符串或是日期时间数据类型的数据。
SQL 如下:
实例MAX()函数用于字符型数据
如下面代码:
SELECT MAX (a) AS MAXNAME
FROMA
F. 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
检查的行进行分组和聚集计算。
G. 关于sql聚集函数的正确描述是
SQL允许定义函数、过程和方法。定义可通过SQL的有关过程的组件,也可以通过外部的程序设计语言,如Java,C或C++。SQL标准所定义的语法,与大多数数据库实现的自身的非标准版本的语法不同。函数和过程允许“业务逻辑”作为存储过程记录在数据库中,并在数据库中执行。
求和函数SUM( )用于对数据求和,返回选取结果集中所有值的总和。语法如下。
SELECT SUM(column_name)
FROM table_name
说明:SUM()函数只能作用于数值型数据,即列column_name中的数据必须是数值型的。
(7)数据库聚集函数扩展阅读:
理解聚集和SQL的 WHERE 以及 HAVING 子句之间的关系对我们非常重要。 WHERE 和 HAVING 的基本区别如下: WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。
相反,HAVING 子句总是包含聚集函数。 (严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
H. 聚集函数是什么
和大多数其它关系数据库产品一样, 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); WRONG不过这个方法不能运转,因为聚集 max 不能用于 WHERE 子句中。 (存在这个限制是因为 WHERE 子句决定哪些行可以进入聚集阶段;因此它必需在聚集函数之前计算。) 不过,我们通常都可以用其它方法实现我们的目的;这里我们就可以使用子查询:
SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
city--------------- San Francisco(1 row)这样做是 OK 的,因为子查询是一次独立的计算,它独立于外层的查询计算出自己的聚集。
聚集同样也常用于 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%'(1) GROUP BY city HAVING max(temp_lo) < 40; LIKE 做模式匹配,在 Section 里有解释。
理解聚集和SQL的 WHERE 以及 HAVING 子句之间的关系对我们非常重要。 WHERE 和 HAVING 的基本区别如下: WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。 因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。 相反,HAVING 子句总是包含聚集函数。 (严格说来,你可以写不使用聚集的 HAVING 子句, 但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
I. 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
J. 数据库聚集函数如何设置
常用的聚合函数
1 count 2 sum 3 avg 4 max 5 min
使用规范时 默认的是all
distinct 指定所有的唯一非空值行
count (行的数目)
select count ( 列或者*) from 表
sum (总和)
select sum(计数规范)from
分组 (group by)
select 列a , 聚合函数 from 表 where 过滤条件 group by 列a (以列a来分组)
过滤聚合函数(having)
select 列a , 聚合函数 from 表 where 过滤条件 group by 列a having 聚合函数过滤条件
要注意的是 SQL语句的执行顺序
(5)select 列a , 聚合函数 (1) from 表 (2) where 过滤条件 (3) group by 列a (4) having 聚合函数过滤条件 (6) order by