已经知道表people中有name,chengji字段
如何查找考试前三名的姓名?sql怎么写法最好

解决方案 »

  1.   

    前三名?不是学号的前三个吧,我差点就写top了
    我对sql不很熟,你查下它里面有什么函数可以用
      

  2.   

    select top 3 * from people 
    order by chengji desc
      

  3.   

    sql.Add('select top 3 chengji,name from(select * from tab order by chengji desc)');
    这样就可以了
    如果要查看姓名
    用FieldByName就可以了
      

  4.   

    --------------------------------------------------------------
    我的例子如下
    (delphi6下测试,用a,b代替字段chengji、name,表tab代替people)
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      with adoquery1 do
      begin
        sql.Clear;
        sql.Add('select top 3 a,b from(select * from tab order by a desc)');
        open;
        while not eof do
        begin
          Showmessage(FieldByName('b').AsString);
          Next;
        end;
      end;
    end;
      

  5.   

    直接Top 3 好像有问题,比如第三名有好几个这能查处1个第三名来应该用 Sql Server 有一个解决这个问题的函数(我给忘了)楼主可以自己查查~
      

  6.   

    SELECT *
    FROM people
    WHERE (chengji IN
              (SELECT TOP 3 chengji
             FROM people
             ORDER BY chengji DESC))
      

  7.   

    偶支持 ghy412(用心良苦)的思路,一般前三名的成绩可能有好几名
    100,99,99,98,98,98
    在楼上的基础上加一个过滤:
    SELECT *
    FROM people
    WHERE (chengji IN
              (SELECT distinct TOP 3 chengji
             FROM people
             ORDER BY chengji DESC))
      

  8.   

    楼上的好像不是这样的吧.同意 Kshape([伟大的大伟!])的做法,不过最好再加上with ties选项,如果有人并列前三名的话
      

  9.   

    直接
    select top 3 with ties chengji,name from people order by chengji desc 
    为什么要用子查询呢?
      

  10.   

    select top 3 with ties * from people order by chengji desc 是不是這樣?
      

  11.   

    XXSingle(水连天【盘古传说】) 的最精确
      

  12.   

    不用认为谁的怎么样了,试一下就知道了
    刚建了个表试了一下,加了些重复值,以下语句能通过:
    SELECT *
    FROM people
    WHERE (chengji IN
              (SELECT DISTINCT TOP 3 chengji
             FROM people))
    ORDER BY chengji DESC
      

  13.   

    access数据库直接top 3 就可以
      

  14.   

    不知道你们这些人加DISTINCT干什么,多此一举。
      

  15.   

    最好的方法是做一张总成绩的视图。然后就用top 3 和DESC来搜索
      

  16.   

    如果考虑到各种情况,就在程序里操作好了,不要用top3了,用个while语句,可以解决并列排名
      

  17.   

    加了DISTINCT目的就是过滤重复分数,才能真正得出前三名的分数
    假设有前五个分数
    第一名:100
    第二名:99
    第二名:99
    第三名:98
    第三名:98如果不加DISTINCT,结果是:
    第一名:100
    第二名:99
    第二名:99而真正第三名的分数则被忽咯
      

  18.   

    要是表people只有两条记录会有什么后果
      

  19.   

    XXSingle(水连天【盘古传说】) 
    的考虑比较全面些
      

  20.   

    我觉得:
    假设有前五个分数
    第一名:100
    第二名:99
    第二名:99
    第三名:98  // 第四名:98
    第三名:98  // 第四名:98所以正确的结果就应该是:
    第一名:100
    第二名:99
    第二名:99如果这样的话 这个语句就可以满足,不需要子查询。select top 3 with ties chengji,name from people order by chengji desc 
    ps:楼主出来说句话呀,到底那个是想要的结果?