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)元组