本文共 1194 字,大约阅读时间需要 3 分钟。
结构为user scores1 802 73 994 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 aORDER 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)+1FROM tb aORDER 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 --*/
本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2009/09/23/1572290.html,如需转载请自行联系原作者