分类:
2011-04-01 14:32:58
1.
因为聚集函数必须与分组子句一起使用,即使使用了聚集函数,语句也无法达到题意要求。
正确写法:
---思想是:将所有学生的年龄降序排列后挑出第1个来就是最大的
select top 1 st_name, year(getdate()) - year(born_date) as nl
from St_Info
order by nl desc
或者使用谓词 ALL:
select st_name, year(getdate()) - year(born_date) from St_Info
where year(getdate()) - year(born_date)>= all(select year(getdate()) - year(born_date) from st_info)
但按照教材的内容和实验顺序,谓词ALL的用法在实验8中,所以此语句仅做为参考。
2.
聚集函数是不可能出现在条件子句中的,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
正确的写法是:
select top 1 st_id, score from S_C_Info
order by Score desc
或者:
select st_id from S_C_Info
where Score = (select MAX(score) from S_C_Info)
但这种写法归属嵌套查询类,而被安排在实验8中,按照教材实验顺序,所以此语句仅做为参考。
特别注意:
1)写法不是唯一的;
2)使用TOP选项只能查到一条记录,也就是说,如果有2个学生的年龄相同或 有2个学生的课程成绩相同,都无法列出第2个学生。但使用子查询不会出现这种问题。
再次思考:
你有什么办法按简单查询方式避免这种现象吗?