MySQL自动填充列根据另一列

时间:2013-12-06 11:16:44

标签: mysql

mysql表中有一个名为marks的列名。标记就像是43,47,97,30,50等。

我想创建另一个名称为 position 的列。数据应自动添加到该列根据标记

前:

对于标记97,位置应为1,

对于标记67,位置应为2,

对于标记50,位置应为3,

如何像那样自动填充位置栏?

2 个答案:

答案 0 :(得分:0)

当有相同的标记时,可能需要调整。当然,如果您希望自动更新位置,则必须将其置于触发器中。或者,在修改标记表中的数据后立即运行更新:

create table marks
(
id int unsigned not null primary key auto_increment,
mark int not null default 0,
position int not null default 0
);

insert into marks (mark) values (97);
insert into marks (mark) values (67);
insert into marks (mark) values (50);

update marks m
inner join (
select m.id,
@curRank := @curRank + 1 AS rank
from marks m
join (SELECT @curRank := 0) r
order by mark desc
) t on m.id = t.id
set m.position = t.rank
;

select *
from marks;

答案 1 :(得分:0)

假设student是带有标记和位置列的表,请尝试以下查询:

UPDATE student 
JOIN (
  SELECT id, IF(@prev <> marks, @s:=@s+1, @s:=@s) AS position, @prev:=marks AS marks
  FROM student, (SELECT @s:= 0, @prev:=0) s
  ORDER BY marks DESC
  ) t
ON student.id = t.id
SET student.position = t.position

工作演示:http://sqlfiddle.com/#!2/6e63e/1