【发布时间】:2016-08-26 00:24:37
【问题描述】:
我正在学习SQL测试,前一年有最后一个问题:
说出研究论文数量最少的学生的名字。多少 他们研究过论文吗?
到目前为止,这是我创建的选择查询:
select min(Full_Name), min(Amount)
from (select st.ST_F_Name & ' ' & st.ST_L_Name as Full_Name, count(*) as Amount
from (student_course as sc
inner join students as st
on st.ST_ID=sc.SC_ST_ID)
group by st.ST_F_Name & ' ' & st.ST_L_Name)
这非常适合返回我想要的结果,但我不确定这是否是我应该执行此查询的方式?我觉得在 Full_Name 上调用 min() 在某些情况下可能会适得其反。有没有更好的方法来做到这一点? (这是在 MS Access 中,原因不明)
【问题讨论】:
-
之所以这样做是因为在这种情况下只有一个学生可以返回。但是,如果我有多个学生的论文数量最少怎么办?据我所知,这只会返回一个学生,而不是其他学生。如果有多个,我怎么写它会返回所有这些?
-
有两种可能:1. 在不存在的地方使用阅读论文数较高的学生,2. 找到最小值并再次将表与计数连接起来以获取具有该数的学生姓名数数。没有
with,这两个查询写起来都很烦人。 -
顺便说一句,问题本身存在不一致:“学生”和“有”是单数,但“有”和“他们”是复数。 (我们想使用
with,因为这两种方法都引用了带有计数的中间表两次,所以我们不必写两次。)