聚集运算(aggregation  operation)G通常的形式如下:聚集运算(aggregation\;operation)\mathcal{G}通常的形式如下:聚集运算(aggregationoperation)G通常的形式如下:
G1,G2,...,GnGF1(A1),F2(A2),...,Fm(Am)(E)_{G_1, G_2, ..., G_n}\mathcal{G}_{F_1(A_1), F_2(A_2), ..., F_m(A_m)}(E)G1,G2,...,GnGF1(A1),F2(A2),...,Fm(Am)(E)
其中E是任意关系代数表达式(或者说是一个关系),G1,G2,...,Gn是用于分组的一系列属性;每个Fi是一个聚集函数,每个Ai是一个属性名。运算含义如下,表达式E的结果中元组以如下方式被分成若干组其中E是任意关系代数表达式(或者说是一个关系),G_1, G_2, ..., G_n是用于分组的一系列属性;\\每个F_i是一个聚集函数,每个A_i是一个属性名。运算含义如下,表达式E的结果中元组以如下\\方式被分成若干组其中E是任意关系代数表达式(或者说是一个关系),G1,G2,...,Gn是用于分组的一系列属性;每个Fi是一个聚集函数,每个Ai是一个属性名。运算含义如下,表达式E的结果中元组以如下方式被分成若干组
(1)同一组中所有元组在G1,G2,...,GnG_1, G_2, ..., G_nG1,G2,...,Gn上的值相同;
(2)不同组中元组在G1,G2,...,GnG_1, G_2, ..., G_nG1,G2,...,Gn上的值不同。
写成SQL查询语句的形式:写成SQL查询语句的形式:写成SQL查询语句的形式:
select G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am)G_1, G_2, ..., G_n, F_1(A_1), F_2(A_2), ..., F_m(A_m)G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am)
from EEE
group by G1,G2,...,GnG_1, G_2, ..., G_nG1,G2,...,Gn
所以最后得到的关系模式为(G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am))。通常采用更名运算为这个模式更改新的关系名以及属性名,然后再使用自然连接或θ连接进行筛选得到目标元组。考虑以下关系数据库,分别给出下列查询的关系代数表达式:所以最后得到的关系模式为(G_1, G_2, ..., G_n, F_1(A_1), F_2(A_2), ..., F_m(A_m))。\\
通常采用更名运算为这个模式更改新的关系名以及属性名,然后再使用自然连接或\theta连接\\进行筛选得到目标元组。\\
考虑以下关系数据库,分别给出下列查询的关系代数表达式:所以最后得到的关系模式为(G1,G2,...,Gn,F1(A1),F2(A2),...,Fm(Am))。通常采用更名运算为这个模式更改新的关系名以及属性名,然后再使用自然连接或θ连接进行筛选得到目标元组。考虑以下关系数据库,分别给出下列查询的关系代数表达式:
(1)找出员工最多的公司。先分组聚集得到每个公司的员工数目(模式:公司名称,员工数目):t1←ρr1(company_name,employee_count)(compnay_nameGcount(personal_name)(works))再聚集得到员工数目最多的公司(模式:员工数目,而且该模式只有一个元组):t2←ρr2(employee_count)(Gmax(employeel_count)(t2))最后做自然连接过滤筛选出员工最多的公司名称:Πcompay_name(t1⋈t2)(1)找出员工最多的公司。\\
先分组聚集得到每个公司的员工数目(模式:公司名称,员工数目):\\
t_1\leftarrow \rho_{r_1(company\_name, employee\_count)}(_{compnay\_name}\mathcal{G}_{count(personal\_name)}(works))\\
再聚集得到员工数目最多的公司(模式:员工数目,而且该模式只有一个元组):\\
t_2\leftarrow \rho_{r_2(employee\_count)}(\mathcal{G}_{max(employeel\_count)}(t_2))\\
最后做自然连接过滤筛选出员工最多的公司名称:\\
\Pi_{compay\_name}(t_1\bowtie t_2)(1)找出员工最多的公司。先分组聚集得到每个公司的员工数目(模式:公司名称,员工数目):t1←ρr1(company_name,employee_count)(compnay_nameGcount(personal_name)(works))再聚集得到员工数目最多的公司(模式:员工数目,而且该模式只有一个元组):t2←ρr2(employee_count)(Gmax(employeel_count)(t2))最后做自然连接过滤筛选出员工最多的公司名称:Πcompay_name(t1⋈t2)
(2)找出工资最少的员工所在公司。先聚集得到工资最少的员工(模式:工资,而且该模式只有一个元组):t1←ρr1(salary)(Gmin(salary)(works))再做自然连接过滤筛选得到工资最少的员工所在的公司名称:Πcompany_name(t1⋈works)(2)找出工资最少的员工所在公司。\\ 先聚集得到工资最少的员工(模式:工资,而且该模式只有一个元组):\\ t_1\leftarrow \rho_{r_1(salary)}(\mathcal{G}_{min(salary)}(works))\\ 再做自然连接过滤筛选得到工资最少的员工所在的公司名称:\\ \Pi_{company\_name}(t_1\bowtie works)(2)找出工资最少的员工所在公司。先聚集得到工资最少的员工(模式:工资,而且该模式只有一个元组):t1←ρr1(salary)(Gmin(salary)(works))再做自然连接过滤筛选得到工资最少的员工所在的公司名称:Πcompany_name(t1⋈works)
(3)找出人均工资First  Bank  Corporation人均工资高的公司。先聚集得到First  Bank  Corporation的人均工资(模式:工资,而且该模式只有一个元组)t1←ρr1(salary)(Gavg(salary)(σcompany_name="First  Bank  Corporation"(works)))再做θ连接过滤筛选得到工资最少的员工所在的公司名称:Πcompany_name(works⋈works.salary>t1.salaryt1)(3)找出人均工资First\; Bank\; Corporation人均工资高的公司。\\ 先聚集得到First\; Bank\; Corporation的人均工资(模式:工资,而且该模式只有一个元组)\\ t_1\leftarrow \rho_{r_1(salary)}(\mathcal{G}_{avg(salary)}(\sigma_{company\_name="First\; Bank\; Corporation"}(works)))\\ 再做\theta连接过滤筛选得到工资最少的员工所在的公司名称:\\ \Pi_{company\_name}(works\bowtie_{works.salary>t_1.salary}t_1)(3)找出人均工资FirstBankCorporation人均工资高的公司。先聚集得到FirstBankCorporation的人均工资(模式:工资,而且该模式只有一个元组)t1←ρr1(salary)(Gavg(salary)(σcompany_name="FirstBankCorporation"(works)))再做θ连接过滤筛选得到工资最少的员工所在的公司名称:Πcompany_name(works⋈works.salary>t1.salaryt1)