数据库聚合
1. 数据库中聚集索引、非聚集索引、填充因子的概念
聚集索引(Clustered Index):对表的物理数据页中的数据按列进行排序,然后再重新存储到磁盘上,即如果说在一个表中建立了聚集索引,则表中的数据页会在会按照索引的顺序来存放
非聚集索引(Nonclustered Index):具有完全独立于数据行的结构,使用非聚集索引不用将物理数据页中的数据按列排序,即非聚集索引不会影响数据表中记录的实际存储顺序。非聚集索引的叶节点存储了组成非聚集索引的关键字值和行定位器。
填充因子:指索引中一个叶子节点的填充率,若都填满就是100%,若填充率为50%,则只有一半的数据
2. sql数据库中聚合函数SUM和COUNT的用法
sum是用作汇总合计
count是汇总记录数
如select count(*) from table 该语句是汇总表中有多少条记录
select sum(qty) from table 是汇总某数字型字段内数量合计
3. 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
检查的行进行分组和聚集计算。
4. sql 语句中那些是聚合函数
常见聚合函数,max(最大)、min(最小)、sum(求和)、avg(平均)等,
示例如下,
1、创建测试表,
create table test_group(id number, value number);
5. 数据库查询,关于聚合函数 max()的用法。
MAX()/MIN()是指SQL中的最大/最小值函数
因为聚合函数处理的是数据组,在本例中,MAX函数将整个TEACHER表看成一组
而TNAME、DNAME和TSEX的数据都没有进行任何分组,因此SELECT语句没有逻辑意义
MAX()和MIN()函数不仅可以作用于数值型数据,也可以作用于字符串或是日期时间数据类型的数据。
SQL 如下:
实例MAX()函数用于字符型数据
如下面代码:
SELECT MAX (a) AS MAXNAME
FROMA