MySQL 案例 - 设置具有多个条件的列

MySQL Case - set column with multiple criteria

我有一个如下所示的 table,我需要根据 num1/num2 标准更新是或否列。

table1:

num1, num2, total,  y_n
   1,    2,    15, NULL
   2,    2,     8, NULL  
   3,    1,     9, NULL
   4,    1,    23, NULL

num2 是一个进程 ID 列,将有成对的重复项。

重复对指向 num1 列中的两个唯一数字。

总计是确定哪个进程使用资源最多的必需比较列。

示例输出:

num1, num2, total,  y_n
   1,    2,    15,    y
   2,    2,     8,    n  
   3,    1,     9,    n
   4,    1,    23,    y

如何创建更新 table 语句以根据总计标记 y_n 列。

结束状态请求: 其中num1个总数大于另一个num1个总数,其中num2个项目相同

使用 self-join.

UPDATE yourTable AS t1
JOIN yourTable AS t2 ON t1.num2 = t2.num2 AND t1.total > t2.total
SET t1.y_n = 'y', t2.y_n = 'n'

DEMO

在更新语句中,您需要将 table 左连接到按 num2 分组的总计的最大值:

update tablename t
left join (
  select num2, max(total) total
  from tablename
  group by num2
) g 
on g.num2 = t.num2 and g.total = t.total
set t.y_n = case 
  when g.num2 is null then 'n'
  else 'y'
end;

参见demo
结果:

| num1 | num2 | total | y_n |
| ---- | ---- | ----- | --- |
| 1    | 2    | 15    | y   |
| 2    | 2    | 8     | n   |
| 3    | 1    | 9     | n   |
| 4    | 1    | 23    | y   |