MYSQL:根据另一列中的重复条目插入新列

时间:2014-09-07 14:50:48

标签: mysql

我是mysql的新手,我有一个像这样的mysql表:

+-------+-------+
| block | CLASS |
+-------+-------+
| 1     | 3112  |
| 2     | 3131  |
| 3     | 3131  |
| 4     | 3131  |
| 5     | 3131  |
| 6     | 3131  |
| 7     | 2131  |
| 8     | 1131  |
| 9     | 1131  |
| 10    | 1131  |
+-------+-------+

我希望添加一个新专栏' LABEL'在CLASS专栏之后。 LABEL类应具有值1,2,3等,但仅为CLASS标签中的重复条目插入相同的值。所以新的LABEL列应该是这样的。

+-------+-------+----------+
| block | CLASS | LABEL    |
+-------+-------+----------+
| 1     | 3112  | 1        |
| 2     | 3131  | 2        |
| 3     | 3131  | 2        |
| 4     | 3131  | 2        |
| 5     | 3131  | 2        |
| 6     | 3131  | 2        |
| 7     | 2131  | 3        |
| 8     | 1131  | 4        |
| 9     | 1131  | 4        |
| 10    | 1131  | 4        |
+-------+-------+----------+

我还没有为任何列定义任何键。 mysql实现这一目标的最佳工具是什么?我需要哪些语句?

1 个答案:

答案 0 :(得分:0)

您可以使用排名查询

UPDATE t
JOIN (
SELECT `block`,
@r:=CASE WHEN @g = `CLASS` THEN @r ELSE @r + 1 END AS rownum,
@g:= `CLASS`
FROM t
CROSS JOIN (SELECT @g:=NULL,@r:=0) t2
ORDER BY `block`,`CLASS`
  ) t1 
  ON (t.`block` = t1.`block`)
  SET t.`LABEL` = t1.rownum

Demo