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
    --
    */

     

  • 相关阅读:
    authentication与网站安全验证
    Android 不一样的原生分享
    iOS学习笔记——AutoLayout的约束
    积累一下SQL
    关于数据链接底层
    减少生成的dll数量
    iOS学习笔记——使用ChildViewController
    iOS学习笔记——键盘处理
    iOS学习笔记——触控与手势
    iOS学习笔记——多控制器管理
  • 原文地址:https://www.cnblogs.com/zengxiangzhan/p/1572290.html
Copyright © 2011-2022 走看看