Chinaunix首页 | 论坛 | 博客
  • 博客访问: 486060
  • 博文数量: 33
  • 博客积分: 4168
  • 博客等级: 上校
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-26 20:21
文章分类

全部博文(33)

文章存档

2013年(8)

2012年(2)

2011年(7)

2010年(1)

2009年(4)

2008年(11)

分类:

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个学生。但使用子查询不会出现这种问题。

 

再次思考:

你有什么办法按简单查询方式避免这种现象吗?

阅读(1001) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~