繁体   English   中英

Mysql用group by更新最大值

[英]Mysql update max value with group by

我有一个已经有很多行的简单表:

id  grade  ...
1    1     ...
2    2     ...
3    2     ...
4    1     ...
5    1     ...

现在我想添加一个列"relative_order" ,这是该等级的顺序。 所以表变成:

 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

您可以使用此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

或者如果要更新值,可以使用上一个查询加入表,如下所示:

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

请看这里的小提琴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM