MySQL - 更新 X,其中 Y 最低

Posted

技术标签:

【中文标题】MySQL - 更新 X,其中 Y 最低【英文标题】:MySQL - Update X where Y is lowest 【发布时间】:2015-10-07 19:10:20 【问题描述】:

我有下表:

       TableA
  x               y
----------------------
 3                1
 2                5
 5                2

现在我想更新 x 列中的值,其中 y 列中的值最低,如下所示:

UPDATE TableA SET x = 1 WHERE y = min(y);

那么第一行应该是 x = 1 和 y = 1。

但我得到以下错误代码:

Error Code: 1111. Invalid use of group function

我该如何解决这个问题?

【问题讨论】:

您收到该错误是因为 min 是一个聚合函数,您需要一个 group by 子句才能使用聚合函数。 这是一个可能有帮助的答案***.com/a/5272523 @Jeff Burgin 是的,但更新不支持按编辑分组:好的,我会查看链接 对,我只是在解释你遇到的错误。 【参考方案1】:

如果y是唯一的,那么你可以使用order bylimit

UPDATE TableA
    SET x = 1 
    ORDER BY Y ASC
    LIMIT 1;

如果有多行有最小值,可以使用join:

UPDATE TableA a JOIN
       (SELECT MIN(Y) as miny FROM TableA) m
       ON a.y = m.miny
    SET x = 1;

【讨论】:

【参考方案2】:

您可以编写如下查询:

UPDATE TableA SET x = 1 WHERE y IN (select min(y) from TableA T2);

【讨论】:

mysql 中你不能引用正在更新的表。【参考方案3】:
UPDATE TableA
    JOIN (SELECT min(y) as min_y, FROM TableA GROUP BY y) 
      as temp ON temp.min_y = TableA.y
   SET x = 1;

【讨论】:

以上是关于MySQL - 更新 X,其中 Y 最低的主要内容,如果未能解决你的问题,请参考以下文章

mysql如何更新一个表中的某个字段值等于另一个表的某个字段值

mysql多条更新

Mysql通过删除差异更新列

如何在 tkinter 中更新由 matplotlib 创建的图形

mysql中的longblob对应java中的啥类型

将所有出现的日期时间更新为该日期的最低日期时间值