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