原贴:http://community.csdn.net/Expert/topic/5162/5162963.xml?temp=.2987635
     求SQL查询语句:两个表之间查询出每个种类的最前一条记录 
可能我说得不太清楚在这里我再说一次比如现在有三个班级 一班,二班,三班
然后要查询出来的效果是先查出每一班的第一名后是第二名....最后一名
至于同名次哪一个班先出现的话就哪一个班的放在前面如下表有记录
Class
id     class
1      一班
2      二班
3      三班success
id    classid    name   suc
1     2          A      80
2     3          B      90
3     2          C      70
4     1          D      75
5     1          E      78
6     3          F      85
7     2          D      86
8     2          H      73
两个表如上:
然后按我上面的要求是先找出第一个班里面第一名的后即:
因为按表success里面suc asc查出这个表的最高分为
id    classid    name   suc
2     三班       B      90
5     一班       E      78
7     二班       D      86然后按表success里面suc asc查出这个表的每班第二高分为
id    classid    name   suc
1     二班       A      80
4     一班       D      78
6     三班       F      85然后按表success里面suc asc查出这个表的每班第三高分
因为1和3班已经没有人了所以就只有2班的为
id    classid    name   suc
8     二班          H      73然后按表success里面suc asc查出这个表的每班第四高分
因为1和3班已经没有人了所以就只有2班的为
id    classid    name   suc
3     二班          C      70
----------------------------------------
按上的的样子要求查出来的按高分排的表就是
id    classid    name   suc
2     三班       B      90
5     一班       E      78
7     二班       D      86
1     二班       A      80
4     一班       D      78
6     三班       F      85
8     二班       H      73
3     二班       C      70问题:
1:如何用一条SQL查询语句查询出上面按每个班最高分排的语句
2:如何用一条SQL查询语句查询出上面按每个班最低分排的语句谢谢

解决方案 »

  1.   

    比我昨天考滤的情况简单多了.CREATE TABLE Cl(id INT,     class VARCHAR(10))
    INSERT Cl SELECT 1,'一班'
    UNION ALL SELECT 2,'二班'
    UNION ALL SELECT 3,'三班'
    CREATE TABLE Su(id INT,    classid INT,  name VARCHAR(10),   suc INT)
    INSERT Su SELECT 1  ,   2,'A',80
    UNION ALL SELECT 2   ,  3,'B',90
    UNION ALL SELECT 3    , 2,'C',70
    UNION ALL SELECT 4    , 1,'D',75
    UNION ALL SELECT 5    , 1,'E',78
    UNION ALL SELECT 6    , 3,'F',85
    UNION ALL SELECT 7    , 2,'D',86
    UNION ALL SELECT 8    , 2,'H',73SELECT *,
    (SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc) cnt
    FROM Su a ORDER BY cnt,idDROP TABLE Cl,Su
      

  2.   

    或者直接SELECT *
    FROM Su a 
    ORDER BY (SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc),id
      

  3.   

    SELECT * FROM Su a
    WHERE 2>(SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc)你是不是指这个? 我不是很明白你的意思.
      

  4.   

    如果也要向上面那样排序的话,写法也一样,自己拼一下就出来了.SELECT *
    FROM Su a 
    WHERE 2>(SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc)
    ORDER BY (SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc),id2>count也可以改成 suc in top 2的写法.
      

  5.   

    主要是:ORDER BY (SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc)
    这里面书里只有写字段的
    你生成一个表是什么意思
      

  6.   

    这里也是产生一个列,不是生成一个表.因为是针对SQL在行进行遍历时当前行的条件得到的聚合值
      

  7.   

    如果不能理解的话,你看这句也是一样的.SELECT *,
    (SELECT COUNT(*) FROM Su b WHERE b.classid=a.classid AND b.suc>a.suc) cnt
    FROM Su a ORDER BY cnt,id
      

  8.   

    能不能再帮我看一下这个贴:
    http://community.csdn.net/Expert/topic/5165/5165112.xml?temp=.5426447
    也是查询的