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)
  • 相关阅读:
    Docker搭建NSQ实时分布式消息集群
    雪花算法
    代码抽象三原则
    PostgreSQL12-主从复制
    logrus日志框架
    Golang中的布隆过滤器
    golang-Json编码解码
    List分组迭代器
    redis-cli命令行远程连接redis服务
    pycharm常用快捷键与设置
  • 原文地址:https://www.cnblogs.com/smallmuda/p/1804051.html
Copyright © 2011-2022 走看看