我是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实现这一目标的最佳工具是什么?我需要哪些语句?
答案 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