请教个 mysql问题   一个表 有 学科ID 学生ID 和 成绩如何查询  每个学科 前两名    一个学科第一名有可能有多个人并列  例如数据如下:学科   学生  成绩
1           1       90
2           1       100
2           2       100
2           3       100
2           4       90
3           1       90
3           2       100
3           3       85 

解决方案 »

  1.   

    select 学生,学科,成绩 from(
    SELECT
    CASE
    WHEN @学科 != 学科 THEN @dense_rank:= 1
    WHEN @成绩 = 成绩 THEN @dense_rank
    ELSE @dense_rank:= @dense_rank + 1
    END AS DENSE_RANK,
    学生,
    @学科 :=学科 AS 学科,
    @成绩 := 成绩 AS 成绩
    FROM
    (SELECT @学科:='') k,
    (SELECT @成绩:=0) v,
    (SELECT @dense_rank:=0) d,
    表名 main
    ORDER BY
    学科,成绩 desc)t where t.DENSE_RANK<=2
      

  2.   

    为啥  我有个表 t_score   给 score字段加索引了select * from t_score where score>100;   可以用到索引select * from t_score where score<90;      用不上索引呢   
    score的范围是 1-100