如何应用规则根据条件和对数据进行分组来更新字段中的记录[关闭]

Posted

技术标签:

【中文标题】如何应用规则根据条件和对数据进行分组来更新字段中的记录[关闭]【英文标题】:How can I apply a rule to update records in a field based on a condition and by grouping the data [closed] 【发布时间】:2020-10-17 21:22:04 【问题描述】:

我正在尝试在 sql 中执行此任务。但我无法得出有助于获得此输出的逻辑。

【问题讨论】:

mysql SQL Server。请仅标记一个数据库。 【参考方案1】:

看起来你想为每个 id 带上代码为“x”的玩家的名字。如果是这样,一个选项使用窗口函数:

select id, playercode, playername,
    max(case when playercode = 'x' then playername end) over(partition by id) requiredoutput
from mytable

如果您的数据库不支持窗口函数,则一种选择使用相关子查询。假设(id, playercode) 上没有重复:

select id, playercode, playername,
    (
        select t1.playername 
        from mytable t1 
        where t1.id = t.id and t1.playercode = 'x'
    ) requiredoutput
from mytable t

【讨论】:

谢谢。一个小小的疑问。如果我有一些其他播放器代码,如“Z”,我不想更新或分配“X”的值怎么办?我想保持这些记录原样! @sam:您通常会使用case 表达式,例如case when playercode = 'z' then playername else max(case when playercode = 'x' then playername end) over(partition by id) end【参考方案2】:

如果您正在寻找更新声明,也许这样的事情会起作用

with upd_cte as (
    select distinct id, player_name
    from tTable
    where Playercode='x')
update t
set requiredoutput=u.player_name
from tTable t
     join upd_cte u on t.id=u.id;

【讨论】:

以上是关于如何应用规则根据条件和对数据进行分组来更新字段中的记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何根据数据框中的值有条件地对数据进行分组?

如何根据条件对sql中的行进行分组

java小技能:对list集合根据条件进行分组过滤和字段筛选

oracle里面怎么多个字段分组排序

MySQL数据库:group分组

SQL如何根据一个字段的某个关键词的前面部分分组查询