zoukankan      html  css  js  c++  java
  • 排名 sql

    结构为
    user scores
    1      80
    2     7
    3     99
    4     58
    ..

    比如我想计算user
    =4在此表中的排名应该如何做?

    SELECT COUNT* ) FROM user_test WHERE scores >= ( SELECT scores FROM user_test 
    WHERE user =4 ) 


    --参数说明:
    --
    sc 表名
    --
    name 人名
    --
    mark 分数
    --
    ord 名次


    1、并列,有空档,名次是不连续的(有两个第二名,接下来的就是第四名)。
    update sc set ord=(select count(*)+1 from sc B where B.mark>sc.mark)
    说明:其实就是求出分数比他多的人数,再加上1。


    2、并列,无空档,名次总是连续的
    update sc set ord=(select count(*from (select distinct mark from sc) as distmark where distmark.mark >=sc.mark)
    说明:
    select distinct mark from sc 是求出不重复的分数,然后看你的分数排在哪个位置。

     

    --1. 名次生成方式1,Score重复时合并名次
    SELECT *,Place=(SELECT COUNT(DISTINCT Score) FROM tb WHERE Score>=a.Score)
    FROM tb a
    ORDER BY Place
    /*--结果
    Name       Score        Place 
    ---------------- ----------------- ----------- 
    aa         99.00        1
    ee         78.00        2
    gg         78.00        2
    dd         77.00        3
    ff         76.00        4
    bb         56.00        5
    cc         56.00        5
    ff         50.00        6
    --
    */

    --2. 名次生成方式2,Score重复时保留名次空缺
    SELECT *,Place=(SELECT COUNT(Score) FROM tb WHERE Score>a.Score)+1
    FROM tb a
    ORDER BY Place
    /*--结果
    Name       Score        Place 
    --------------- ----------------- ----------- 
    aa         99.00        1
    ee         78.00        2
    gg         78.00        2
    dd         77.00        4
    ff         76.00        5
    bb         56.00        6
    cc         56.00        6
    ff         50.00        8
    --
    */

     

  • 相关阅读:
    Fragment 总结
    Varnish缓存服务器的搭建配置手册
    关于页面缓存服务器的研究报告
    基于Html5的移动端开发框架的研究
    C#的Process类的一些用法
    c#中进程的使用
    C#反射(转载)
    进制的转换 以及十进制转换成x进制的代码
    算法及其复杂度
    cocos总结
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1572290.html
Copyright © 2011-2022 走看看