我有一个通用的问题,我将尝试使用一个例子来解释.
假设我有一个包含字段的表:"id","name","category","appearances"和"ratio"
我的想法是,我有几个项目,每个项目都与一个类别有关并且多次"出现".比率字段应包括每个项目出现的百分比,超出该类别中项目的总出现次数.
在伪代码中我需要的是以下内容:
对于每个类别,
查找与其相关的项目的外观总和.例如,它可以用(select sum("appearances") from table group by category)完成
对于每个项目,
将比率值设置为项目的外观除以上面类别的总和
现在,我正在尝试使用单个更新查询来实现此目的,但似乎无法做到这一点.我认为我应该做的是:
update Table T
set T.ratio = T.appearances /
(
select sum(S.appearances)
from Table S
where S.id = T.id
)
Run Code Online (Sandbox Code Playgroud)
但MySQL不接受更新列中的别名T,我没有找到实现此目的的其他方法.
有任何想法吗?
我已经写了一个存储过程sqlyog.除了concat语句之外,它很长并且执行所有所需的功能,因此我只列出该特定查询.
UPDATE recipes_new
SET co_auths = CONCAT(co_auths,',',c1id)
WHERE id = name_in;
Run Code Online (Sandbox Code Playgroud)
我基本上希望在两个字段中分离,并且此语句放在游标中,因此它是迭代的.co_auths目前为空,所以我得到的结果为1,2,3,因为我希望它是1,2,3.任何猜测最合适的解决方案是什么?