如何获取每个项目的最高得分(只取一个)及对应的项目、姓名、籍贯、生日?数据如下:姓名 籍贯 生日       项目 得分
程菲 湖北 1988-05-29 跳马 10.0
江钰源 广西 1991-11-01 高低杠 9.9
何可欣 北京 1982-06-30 高低杠 9.8
李珊珊 湖北 1992-02-22 平衡木 9.9
杨伊琳 广东 1992-08-26 高低杠 9.8
邓琳琳 安徽 1992-04-21 平衡木 9.9要求输出结果如下:姓名 籍贯 生日       项目 得分
程菲 湖北 1988-05-29 跳马 10.0
江钰源 广西 1991-11-01 高低杠 9.9
邓琳琳 安徽 1992-04-21 平衡木 9.9或者输出结果如下亦可:姓名 籍贯 生日       项目 得分
程菲 湖北 1988-05-29 跳马 10.0
江钰源 广西 1991-11-01 高低杠 9.9
李珊珊 湖北 1992-02-22 平衡木 9.9请问如何用一个SQL获得上述结果?

解决方案 »

  1.   

    select 姓名,籍贯,生日,项目,得分
    from
    (
    select 姓名,籍贯,生日,项目,得分,row_number() over(partition by 项目 order by 得分 desc) rn
    from table1
    )
    where rn=1;
      

  2.   

    把row_number() 换成rank()比较好一些,可以处理并列第一的情况。表里这么没有sex这个字段哟。是通过项目就可以区分叻么?
      

  3.   

    3楼的提议很好,应该是使用rank(),假如是数值最大的,那个就极有可能输出的结果和LZ要求的不一样了啊
      

  4.   

    感谢1楼的csuxp2008快速给出完美的答复!
      

  5.   

    回3楼的inthirties, 这是管理国家女子体操队的队员, 所以不需要性别字段. :)
      

  6.   

    加4楼的bzcnc, RANK()不太符合题意, 若需返回所有最高分人员则可以用.