如果一个需求要求查询的结果集有一列自增序列号MySQL要怎么实现?
name name1 name2 score
张三 理科 数学 50
张三 理科 数学 60
李四 理科 数学 70
张三 理科 物理 70
李四 文科 数学 80
张三 理科 化学 80
张三 文科 数学 90
方法一:
SELECT (SELECT COUNT(1) FROM ss WHERE score<=a.score) as seq,`name`,score FROM ss a
结果:(seq 顺序不对!是因为score不是唯一的字段,此方法条件仅于含唯一标识字段)
seq name score
1 张三 50
2 张三 60
4 李四 70
4 张三 70
6 李四 80
6 张三 80
7 张三 90
方法二:
SET @rownum =0;
SELECT *,@rownum := @rownum +1 as seq from ss;
一起执行!
或者:select ss.* ,(@i:=@i+1) as seq from ss,(select @i:=0) as it 也可以达到通用效果
id name name 1 name 2 score seq
1 张三 理科 数学 50 1
2 张三 理科 数学 60 2
3 李四 理科 数学 70 3
4 张三 理科 物理 70 4
5 李四 文科 数学 80 5
6 张三 理科 化学 80 6
7 张三 文科 数学 90 7
附带一个网上查的sql的用法,好像比较强大:
给查询出的SQL记录添加序号列,解决方法有以下两种
第一:
select ROW_NUMBER() OVER (ORDER BY a.字段 ASC) AS XUHAO,a.* from table a
(table 为表名,字段为表a中的字段名)
第二:
select RANK() OVER (ORDER BY a. 字段 ASC) AS XUHAO,a.* from table a(table 为表名,字段为表a中的字段名)
出处:http://blog.csdn.NET/xsfqh/article/details/6663895