zoukankan      html  css  js  c++  java
  • 分组后取每组内排名的Top N的SQL语句

    给个MySQL例子参考 

    -----查询每门课程的前2名成绩   

    CREATE   TABLE   StudentGrade( 
    stuId   CHAR(4),         --学号 
    subId   INT,                 --课程号 
    grade   INT,                 --成绩 
    PRIMARY   KEY   (stuId,subId) 

    GO 
    --表中数据如下 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',1,97); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',2,50); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '001 ',3,70); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',1,92); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',2,80); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '002 ',3,30); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',1,93); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',2,95); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '003 ',3,85); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',1,73); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',2,78); 
    INSERT   INTO   StudentGrade(stuId,subId,grade)   VALUES( '004 ',3,87); 
    GO 
     
    --查看数据 
    select   *   from   StudentGrade 


    --假如出现并列时,也只取两个同学的话。 
    --方法一: 
    select   distinct   * 
    from   studentgrade   as   t1 
    where   stuid   in 
    (select   top   2   stuid 
      from   studentgrade   as   t2 
      where   t1.subid=t2.subid 
                      order   by   t2.grade   desc) 
    order   by   subid,   grade   desc 

    --方法二: 
    select   *   from   StudentGrade   a   where   (select   count(1)   from   studentGrade   where   subId=a.subId   and   grade> =a.grade) <=2 

    --方法三: 
    select   *   from   StudentGrade   t 
    where   (select   count(1)   from   StudentGrade   where   subid=t.subid   and   grade> t.grade) <=1 
    order   by   subId,grade   desc 

    --结果 
     

    drop   table   StudentGrade

  • 相关阅读:
    c#正则表达式应用实例
    C# 中堆栈,堆,值类型,引用类型的理解 (摘抄)
    c#用正则表达式获得指定开始和结束字符串中间的一段文本
    asp.net c#截取指定字符串函数
    <收藏>提高Web性能的14条法则(详细版)
    利用Anthem.net 实现前台javascript调用服务器端c#函数 及流程分析
    Anthem.net
    jQuery animate(滑块滑动)
    .NET使用母版页后,控件名称自动生成导致js无法正常操作.net控件的问题
    Cocos2dx跨平台Android环境配置
  • 原文地址:https://www.cnblogs.com/zhangleisanshi/p/5168798.html
Copyright © 2011-2022 走看看