加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

SQL 查询结果增加自增序列

(2014-03-07 14:45:20)
标签:

sql查询自增列

oracle查询结果自增列

mysql查询结果自增列

sqlserver查询自增列

sql查询结果排名

分类: 数据库学习

    在某些需求情况下,我们需要在查询表数据的结果中增加一个自增序列来直观表现当前数据的排列情况或者是排名情况,这样结果集的排列或者排名就比较明显,那在各种数据库中是如何来实现的呢?下面针对几种主流的数据库来举例看下。

 

一、SQL Server数据库
    对于SQL Server数据库,在查询结果集中增加自增序列,因版本不同而有所不同。
1、SQL Server2000 SQL查询结果中自增序列

select  identity(int,1,1) uid,user_name,sum(score)score
into #tmp
from  t_user_info
group  by user_name
order by sum(score) desc


select *
from #tmp

 

2、SQL Server2005及以上 SQL查询结果中自增序列
a、使用over函数排序
select  row_number() over (order by sum(score) desc) uid,user_name,sum(score)score
from  t_user_info
group  by user_name


b、over函数中不做排序处理
select  row_number() over (order by getdate()) uid,user_name,sum(score)score
from  t_user_info
group  by user_name
order by sum(score) desc

 

注意:SQL Server2005及以上版本中还有其他一些排名函数,如:rank(),dense_rank(),ntile()等,详细用户这里不再叙述。

 

二、Mysql SQL查询结果中自增序列
1、先初始化一个变量,在查询时递加
SET @i=0;
SELECT  @i:=@i+1 AS id,NAME,COUNT(NAME) name_num
FROM  persons
GROUP  BY NAME
ORDER BY COUNT(NAME) DESC

 

2、初始变量作为一个对象进行递加
SELECT  @i:=@i+1 AS id,a.name,COUNT(a.name) name_num
FROM  persons a,(SELECT @i:=0) AS b
GROUP  BY a.name
ORDER BY COUNT(a.name) DESC

 

3、表内数量关联,在查询时自增排序
SELECT (SELECT COUNT(*)+1 FROM  (SELECT uname,COUNT(uage)uage FROM t_allcol_repet GROUP BY uage)a  WHERE uage>b.uage) AS paiming,b.uname
FROM  (SELECT uname,COUNT(uage)uage
FROM  t_allcol_repet
GROUP  BY uage
)b
ORDER BY b.uage DESC

 

注意:一般常用的为方法1和2,使用第三中方法,需要表中存在一定的数量比较关系。

 

三、Oracle SQL查询结果中自增序列

1、利用row_number() 函数生成自增列
select row_number() over() uid,user_name,sum(score)score
from  t_user_info
group  by user_name
order by sum(score) desc

 

2、利用rownum 函数生成自增列
select rownum,a.* from (select uid,user_name,sum(score)score
from  t_user_info
group  by user_name
order by sum(score) desc
)a

 

3、利用序列,在查询是生成自增列

a、创建序列seq_tmp:
create sequence seq_tmp
maxvalue 100000
minvalue 1
start with 1
increment by 1
cache 10

 

b、利用序列,在查询时生成自增列
select seq_tmp.nextval as id,user_name,sum(score)score
from  t_user_info
group  by user_name
order by sum(score) desc

 

 

 

    本文在结合自己平时需求数据中的测试情况和相关网络资料的基础上总结而来,如果大家还有什么好的方法,欢迎提出。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有