MySQL Case-使用多个条件设置列

时间:2019-05-24 17:14:07

标签: mysql case mysql-5.7

我有一个如下表,我需要根据num1 / num2条件更新yes或no列。

表1:

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

如何创建基于总数的更新表语句来标记y_n列。

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

2 个答案:

答案 0 :(得分:1)

使用自联接。

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

答案 1 :(得分:1)

在update语句中,您需要将表左连接到按num2分组的total的最大值:

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   |