zoukankan      html  css  js  c++  java
  • MYSQL成绩排名

    有两种方法:
    1、效率不高,因为有子查询。但是简洁。而且我对SOCRES表做了INDEX。所以性能上也差不了多少。
    mysql> show create table scores\G
    *************************** 1. row ***************************
           Table: scores
    Create Table: CREATE TABLE `scores` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `score` int(11) DEFAULT '0',
      PRIMARY KEY (`id`),
      KEY `k_s` (`score`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
    1 row in set (0.00 sec)
     
    mysql> select count(1) from scores;
    +----------+
    | count(1) |
    +----------+
    |  1000000 |
    +----------+
    1 row in set (0.00 sec)
     
     
    mysql> select id,score,(select count(1) from scores where score>= (select score
    from scores where id = 100 order by score desc limit 1)) as rank from scores whe
    re id = 100;

    +-----+-------+--------+
    | id  | score | rank   |
    +-----+-------+--------+
    | 100 |    64 | 370311 |
    +-----+-------+--------+
    1 row in set (1.05 sec)
     
    2、分句完成。效率高。
    存储过程:
    DELIMITER $$
    DROP PROCEDURE IF EXISTS `test`.`sp_rank`$$
    CREATE PROCEDURE `test`.`sp_rank`(IN str_id int(11))
    BEGIN
      -- user's score
      DECLARE str_score int;
      -- user's rank
      DECLARE rank int;
      select score from scores where id = str_id order by score desc limit 1 into str_score ;
      select count(*) from scores where score >=str_score into rank;
      -- output
      select id,score,rank from scores where id = str_id;
    END$$
    DELIMITER ;
     
    mysql> call sp_rank(100);
    +-----+-------+--------+
    | id  | score | rank   |
    +-----+-------+--------+
    | 100 |    64 | 370311 |
    +-----+-------+--------+
    1 row in set (1.02 sec)
    Query OK, 0 rows affected (1.02 sec)
  • 相关阅读:
    苹果mac shell 终端 命令行快捷键——行首行尾
    mac 编译ffmpeg真简单!
    (2)小彩灯接收数据解析
    JSON数据解析(自写)
    ESP-手机--双向通信模式
    史上最全脉搏心率传感器PulseSensor资料(电路图+中文说明书+最全源代码)
    OpenSCAD 大白
    用OpenSCAD設計特製的遊戲骰子
    如何使用openscad绘制一个简单的键帽.
    OpenSCAD(1)基础教程
  • 原文地址:https://www.cnblogs.com/qq378829867/p/2915864.html
Copyright © 2011-2022 走看看