author 王迪 2021212007


更正

虽然从刚才内层开始写符合思维过程,但是如果先写内层的话,可能也会有下面的问题:

刚才那个group by地两个对比


code1:
下面这个是select出的东西的表中有多组元素
select count(course_id)
from student natural join takes
group by ID, course_id
having count(course_id) > 1

(在school数据库的large dataset中)
输出736行,每一行是一个数字,下面是部分输出
2
2
2
2
2
2
2
2
2
2
......

code2:
下面这个select出的东西的表中只有一个元素
select count(*)
from (select ID, course_id
			from student natural join takes
			group by ID, course_id
			having count(course_id) > 1)

输出一个数(在school数据库的large dataset中)
736

区别在于,第一个code是数聚集成(ID,course_id)组合后,
每个组合的元素个数,等价于:
select count(*)
from student natural join takes
group by ID, course_id
having count(course_id) > 1

第二个code是把所有有重修的课的(ID,course_id)元组建立一个表,
然后再统计这个表中有多少的(ID,course_id)元组

目录

  1. 数据库结构介绍
  2. 《minmax问题》
  3. 《嵌套子查询实践》
  4. 《修Biology系的课学生是不是卷王?》
  5. 《把重修的孩子找出来!》
  6. 《怎么要求这么多?》
  7. 总结

数据库结构介绍


数据库来源