--try
select firstname,age,t_id
from persons outer
where age <=
           (select avg(age) 
           from persons
           where t_id=outer.t_id);

解决方案 »

  1.   


    --试试下面的写法,这样写效率也比较高一点select outer.firstname,outer.age,outer.t_id
    from persons outer 
         join (select t_id,avg(age) avgage 
               from persons
               where group by t_id) avgtab
         on outer.t_id = avgtab.t_id
    where outer.age < avgtab.avgage
      

  2.   

    select firstname,age,t_id
    from persons outer
    where age <
               (select avg(age) 
               from persons
    );
    这是楼主要的结果吗?
    你是不是T_ID是主键啊,如果是,那你那么写就肯定为空的.
      

  3.   

    re:你是不是T_ID是主键啊,如果是,那你那么写就肯定为空的.
    那是什么原因?
      

  4.   

    re:你是不是T_ID是主键啊,如果是,那你那么写就肯定为空的.
    那是什么原因?
    ==========> 因为,当ID是当主键时,所有记录都符合下面条件
    select firstname,age,t_id
    from persons outer
    where age =(select avg(age) 
               from persons
               where t_id=outer.t_id)
    也就是说,没有任何一条记录是小于的。
      

  5.   

    select firstname,age,t_id
    from persons outer
    where age <
               (select avg(age) 
               from persons);这样才是对的.因为你用t_id本来就是一个人.怎么会有平均呢??平均就是应该全部或部分.
      

  6.   

    我猜:楼主的表里t_id是个类似组的编号,每组有N个人(firstname,age),现要查出每个t_id组的年龄小于平均年龄的人名、年龄、组名。
    你那么写好象没有错,我没试验过。可能是每个t_id组只有一条记录吧。
    你的写法效率很低,如果有N条记录,会查询2的N次方次表
    要我就这么写,只查询2的N倍次表:
    select outer.firstname,outer.age,outer.t_id 
      from persons outer,
           (select avg(age) age,t_id from persons group by t_id) outer2
      where outer.t_id=outer2.t_id
      and   outer.age<outer2.age;