在关系代数(Relational Algebra)中,本身没有像 SQL 的 GROUP BY 那样直接的“分组”运算符,但可以通过**扩展的关系代数(Extended Relational Algebra)**来实现分组统计。
下面分层次说明。
标准关系代数包括:
标准关系代数不能直接做分组统计,因为它不支持“按某属性聚合”。
实际教学和数据库系统中,通常使用扩展关系代数,引入:
形式:
γ_{分组属性, 聚合函数}(关系)
其中:
γ 是分组运算符(gamma)COUNT、SUM、AVG、MAX、MINStudent(Sno, Sname, Dept, Age)
SQL:
SELECT Dept, COUNT(*)
FROM Student
GROUP BY Dept;
关系代数:
γ_{Dept, COUNT(Sno)→Num}(Student)
含义:
Dept 分组Sno 的数量Dept, NumSQL:
SELECT Dept, AVG(Age)
FROM Student
GROUP BY Dept;
关系代数:
γ_{Dept, AVG(Age)→AvgAge}(Student)
统计年龄大于20的学生,每个系的人数
SQL:
SELECT Dept, COUNT(*)
FROM Student
WHERE Age > 20
GROUP BY Dept;
关系代数:
γ_{Dept, COUNT(Sno)→Num}(σ_{Age>20}(Student))
如果不写分组属性,就是整体聚合:
统计全体学生人数:
γ_{COUNT(Sno)→Total}(Student)
| SQL | 关系代数 |
|---|---|
| WHERE | σ |
| GROUP BY | γ 的分组属性 |
| 聚合函数 | γ 中的聚合 |
| HAVING | σ(γ(…)) |
统计人数大于3的系:
σ_{Num>3}(γ_{Dept, COUNT(Sno)→Num}(Student))
如果你愿意,我也可以用考试题型 / 图示 / 与 SQL 对照练习的方式再讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。