我有一个如下表,我需要根据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项相同。
答案 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'
答案 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 |