cam*_*ron 4 mysql sql group-by sql-update
我有一个已经有很多行的简单表:
id grade ...
1 1 ...
2 2 ...
3 2 ...
4 1 ...
5 1 ...
Run Code Online (Sandbox Code Playgroud)
现在我想添加一个列"relative_order",这是该等级的顺序.所以表变成:
Run Code Online (Sandbox Code Playgroud)id grade ... relative_order 1 1 ... 1 2 2 ... 1 3 2 ... 2 4 1 ... 2 5 1 ... 3
添加列后,所有relative_order首先变为0.如何使用update语法填充relative_order列?
我尝试使用内连接,但失败了:
UPDATE table AS i
INNER JOIN(
SELECT max(relative_order) as mOrder,grade
FROM table
GROUP BY grade
) AS j
ON i.grade = j.grade
SET i.relative_order = j.mOrder + 1
Run Code Online (Sandbox Code Playgroud)
您可以使用此SELECT查询返回relative_order您需要的内容:
SELECT
t1.id,
t1.grade,
COUNT(t2.id) relative_order
FROM
yourtable t1 INNER JOIN yourtable t2
ON t1.grade=t2.grade AND t1.id>=t2.id
GROUP BY
t1.id,
t1.grade
Run Code Online (Sandbox Code Playgroud)
或者如果要更新值,可以使用上一个查询加入表,如下所示:
UPDATE
yourtable INNER JOIN (
SELECT
t1.id,
t1.grade,
COUNT(t2.id) relative_order
FROM
yourtable t1 INNER JOIN yourtable t2
ON t1.grade=t2.grade AND t1.id>=t2.id
GROUP BY
t1.id,
t1.grade) seq
ON yourtable.id=seq.id AND yourtable.grade=seq.grade
SET
yourtable.relative_order = seq.relative_order
Run Code Online (Sandbox Code Playgroud)
请看这里的小提琴.