1 求数据项的名次

SET @counter=0;
SELECT @counter:=@counter+1 as rank, s.id,s.sname,e.item_1+e.item_2+e.item_3+e.item_4+e.item_5+e.item_6+e.item_7+e.item_8+e.item_9+e.item_10+e.item_11+e.item_12+e.item_13
+e.item_14+e.item_15++e.item_16+e.item_17+e.item_18+e.item_19+e.item_20 as mysum 
FROM exam e,student s 
WHERE s.exam_id=e.exam_id
ORDER BY mysum DESC
LIMIT 3;

2 求 某项数据在整个数据表中的名次

SET @counter=0;
SELECT stu.id,stu.sname as "姓名",ee.rank as "名次", ee.mysums as "总的分" from(
SELECT @counter:=@counter+1 as rank,e.exam_id,e.item_1+e.item_2+e.item_3+e.item_4+e.item_5+e.item_6+e.item_7+e.item_8+e.item_9+e.item_10+e.item_11+e.item_12+e.item_13
+e.item_14+e.item_15++e.item_16+e.item_17+e.item_18+e.item_19+e.item_20 as mysums 
FROM exam e
ORDER BY mysums DESC) ee, student stu 
where ee.exam_id=stu.exam_id AND stu.id=2;

SET @counter=0; 用户自定义的变量

当然也可以使用 select 来定义变量 SELECT @A :=0;

 

 

 


编写存储过程实现 查出前N条数据

BEGIN
    SET @counter=0;
    SET @sums=0;
    SET @paixu=0;
    set @rownum=0;
    set @coas=5;
    SELECT IF(@sums=mysum,@paixu,@paixu:=@paixu+1) AS rank, @sums:=mysum AS "总得分",A.id as "学生ID",A.sname AS "学生姓名"  FROM(
    SELECT @counter:=@counter+1 as rank, s.id,s.sname,e.item_1+e.item_2+e.item_3+e.item_4+e.item_5+e.item_6+e.item_7+e.item_8+e.item_9+e.item_10+e.item_11+e.item_12+e.item_13
    +e.item_14+e.item_15++e.item_16+e.item_17+e.item_18+e.item_19+e.item_20 as mysum 
    FROM exam e,student s 
    WHERE s.exam_id=e.exam_id
    ORDER BY mysum DESC)A
    LIMIT 0,cols;
END

编写 自定义函数 实现查找 前N名共有多少条数据

BEGIN
    #Routine body goes here...
    DECLARE colsnum INT ;
    
    SET @counter=0;
    SET @sums=0;
    SET @paixu=0;
    set @rownum=0;
    set @coas=5;
    
    SELECT COUNT(*) into colsnum FROM(
        SELECT IF(@sums=mysum,@paixu,@paixu:=@paixu+1) AS rank, @sums:=mysum AS "总得分",A.id as "学生ID",A.sname AS "学生姓名"  FROM(
            SELECT @counter:=@counter+1 as rank, s.id,s.sname,e.item_1+e.item_2+e.item_3+e.item_4+e.item_5+e.item_6+e.item_7+e.item_8+e.item_9+e.item_10+e.item_11+e.item_12+e.item_13
                +e.item_14+e.item_15++e.item_16+e.item_17+e.item_18+e.item_19+e.item_20 as mysum 
            FROM exam e,student s 
        WHERE s.exam_id=e.exam_id
        ORDER BY mysum DESC)A) aa
    WHERE aa.rank<=rankNum;

    RETURN colsnum;
END

sqlserver 和oracle 都有排名函数

MySQL没有 排名函数

 posted on 2017-03-03 23:13  夏末秋萍  阅读(258)  评论(0编辑  收藏  举报