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'
在更新语句中,您需要将 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 |
我有一个如下所示的 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'
在更新语句中,您需要将 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 |