有一数据库:
科目  姓名  分数语文  张三  80
语文  李四  75
语文  王五  85
语文  赵六  90
数学  张三  100
数学  李四  90
数学  王五  60
数学  赵六  75
英语  张三  80
英语  李四  85
英语  王五  60
英语  赵六  70怎么样用一SQL语句得到每科目分数前三名的记录?

解决方案 »

  1.   

    select * from table order by 语文 desc limit 3
      

  2.   

    select top 3 * from table order by 语文 desc
      

  3.   

    不行,SQLServer中好像没有limit这个关键字吧
      

  4.   

    CREATE TABLE T1(SUBJECT VARCHAR(10),NAME VARCHAR(10),SCORE INT)
    INSERT T1 SELECT '语文','张三',80
    UNION ALL SELECT '语文','李四',75
    UNION ALL SELECT '语文','王五',85
    UNION ALL SELECT '语文','赵六',90
    UNION ALL SELECT '数学','张三',100
    UNION ALL SELECT '数学','李四',90
    UNION ALL SELECT '数学','王五',60
    UNION ALL SELECT '数学','赵六',75
    UNION ALL SELECT '英语','张三',80
    UNION ALL SELECT '英语','李四',85
    UNION ALL SELECT '英语','王五',60
    UNION ALL SELECT '英语','赵六',70SELECT *,IDENTITY(INT,1,1) AS ID INTO # FROM T1SELECT * FROM # A
    WHERE ID IN
    (SELECT TOP 3 ID FROM # WHERE SUBJECT=A.SUBJECT  ORDER BY SCORE DESC)
      

  5.   

    --方法2
    不用临时表
    CREATE TABLE T1(SUBJECT VARCHAR(10),NAME VARCHAR(10),SCORE INT)
    INSERT T1 SELECT '语文','张三',80
    UNION ALL SELECT '语文','李四',75
    UNION ALL SELECT '语文','王五',85
    UNION ALL SELECT '语文','赵六',90
    UNION ALL SELECT '数学','张三',100
    UNION ALL SELECT '数学','李四',90
    UNION ALL SELECT '数学','王五',60
    UNION ALL SELECT '数学','赵六',75
    UNION ALL SELECT '英语','张三',80
    UNION ALL SELECT '英语','李四',85
    UNION ALL SELECT '英语','王五',60
    UNION ALL SELECT '英语','赵六',70
    Select * From T1 A Where (Select Count(*) From T1 Where SUBJECT=A.SUBJECT And SCORE<A.SCORE)<3
    方法三:
    不用临时表:
    Select * From T1 A Where Not Exists (Select 1 From T1 Where SUBJECT=A.SUBJECT And SCORE<A.SCORE Having Count(*)>2)