• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

排名 sql

武飞扬头像
雄风铁骑
帮助1

结构为

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

--*/

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiccbch