数据如下:
name val(成绩) memo(科目)
a    2   a2(a的第二个值)
a    1   a1--a的第一个值
a    3   a3:a的第三个值
b    1   b1--b的第一个值
b    3   b3:b的第三个值
b    2   b2b2b2b2
b    4   b4b4
b    5   b5b5b5b5b5
*/
--创建表并插入数据:
create table tb(name varchar(10),val int,memo varchar(20))
insert into tb values('a',    2,   'a2(a的第二个值)')
insert into tb values('a',    1,   'a1--a的第一个值')
insert into tb values('a',    3,   'a3:a的第三个值')
insert into tb values('b',    1,   'b1--b的第一个值')
insert into tb values('b',    3,   'b3:b的第三个值')
insert into tb values('b',    2,   'b2b2b2b2')
insert into tb values('b',    4,   'b4b4')
insert into tb values('b',    5,   'b5b5b5b5b5')
go--一、按name分组取val最大的值所在行的数据。
--方法1:
select a.* from tb a where val = (select max(val) from tb where name = a.name) order by a.name请问select max(val) from tb where name = a.name 中name=a.name 是啥意思!

解决方案 »

  1.   

    分组不应该是用group by 为什么这里写成 name=a.name
      

  2.   

    "请问select max(val) from tb where name = a.name 中name=a.name 是啥意思!"里边子查询跟外边表的连接条件啊,a表指外面那个tb。 
      

  3.   

    其实很简单的。select max(val) from tb where name = a.name
    就是取得当前NAME 下的最大VAL
    剩下的很好理解了。就是把包含当前NAME下的最大VAL的一行数据取出来!不知道这样解释能否明白
      

  4.   

    老大讲的透切点啊,取出当前NAME 的最大VAL 那么分组是怎么实现的呢?