当前位置:  数据库>sqlserver

用于排名的sql

    来源: 互联网  发布时间:2014-08-29

    本文导语:  注:很有用的sql,在一些新闻类、电子商务类网站中用的比较多。 结构为 user scores 1      80 2     7 3     99 4     58 .. 比如我想计算user=4在此表中的排名应该如何做? 代码如下: SELECT COUNT( * ) FROM user_test WHERE scores >=...

注:很有用的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
--*/

    
 
 

您可能感兴趣的文章:

  • SQL Server中用于备份的语句
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 Operators:操作符,用于字符串比较和赋值
  • 一个用于番茄工作法的计时器 小番茄
  • C++ Strings(字符串) 成员 Constructors:构造函数,用于字符串初始化
  • 用于文本抽取的模式匹配语言 TXR
  • 什么是Docker?Docker通常用于如下场景
  • 鼠标dragged时,怎么做出虚框效果,用于选中物件?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • 谁能提供一些 Java 平台用于小型网络设备的平台的资料?
  • VisiBroker For C++ 可以用于 EJB 吗?
  • make menuconfig是专门用于编译内核的吗?
  • 大家来讨论一下,在linux下除了openGL还有什么可以用于多媒体视频开发的接口库?
  • 请问大家开发linux内核一般是在做/用于什么项目?
  • 请问:syslog能否用于多线程或者多进程的程序中进行写日志啊?
  • Liunx用于服务器方面请教
  • clonezilla能用于磁盘阵列吗?
  • hexdump工具不能用于目录吗?
  • 用于测试的邮件服务器 Mockemail
  • 怎样用JDK写用于ASP的组件?最好有例子或详细资料!
  • 40G硬盘全部用于linux,分区时有什么好的建议?
  • 属性owner不可用于数据库xxx的解决方法
  • 我没用过Java,请问各位大侠Java中除了/*...*/用作注释外,还有什么符号可用于注释符?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3