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)
  • 相关阅读:
    用react重构个人网站 3-23
    用react重构个人网站 3-22
    React官方文档笔记之快速入门
    .Net多线程编程—同步机制
    .Net多线程编程—Parallel LINQ、线程池
    .Net多线程编程—并发集合
    .Net多线程编程—任务Task
    【翻译】MongoDB指南/聚合——聚合管道
    【翻译】MongoDB指南/CRUD操作(四)
    【翻译】MongoDB指南/CRUD操作(三)
  • 原文地址:https://www.cnblogs.com/smallmuda/p/1804051.html
Copyright © 2011-2022 走看看