我有一个一般性的问题,我将尝试通过一个例子来解释。
假设我有一个包含以下字段的表格:“ id”,“ name”,“ category”,“ appearances”和“ ratio”
我的想法是,我有几个项目,每个项目都与一个类别相关,并且多次“出现”。比率字段应包括类别中项目出现的总数中每个项目出现的百分比。
用伪代码,我需要以下内容:
对于每个类别, 找到与该 类别 相关的项目的总外观。例如,可以用(select sum("appearances") from table group by category)完成
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 )
但是MySQL在更新列中不接受别名T,而且我也没有找到其他方法来实现这一点。
有任何想法吗?
遵循我收到的两个答案(所有答案都没有完成,所以我写了自己的答案),最终我做了以下工作:
UPDATE Table AS target INNER JOIN ( select category, appearances_sum from Table T inner join ( select category as cat, sum(appearances) as appearances_sum from Table group by cat ) as agg where T.category = agg.cat group by category ) as source ON target.category = source.category SET target.probability = target.appearances / source.appearances_sum
它运作非常迅速。我也尝试了相关子查询,但是它慢得多(数量级),所以我坚持使用联接。