我有一个更新语句形式的查询。假设这是电子邮件活动的公开价格,在本例中,城市是伦敦。
我想每月对80个城市运行这个查询,并将结果显示在2018年城市表中。有没有一种方法可以让我自动化,这样我就不必每个月都输入所有的城市?
不要觉得有义务提供代码,你可以直接指出我的方向的过程,如果你想,我可以调查,但我正在努力寻找的话问谷歌!
UPDATE 2018_Cities SET openRate = (
SELECT ROUND((
SELECT (
SELECT COALESCE( SUM(opens),0)
FROM 0118
WHERE siteshort
IN('London')) + (
SELECT COALESCE( SUM(opens),0)
FROM 0218
WHERE siteshort
IN('London'))
as result) /
(SELECT (
SELECT COALESCE( SUM(recipients),0)
FROM 0118
WHERE siteshort
IN('London')) + (
SELECT COALESCE( SUM(recipients),0)
FROM 0218
WHERE siteshort
IN('London'))
as result) * 100, 1)) WHERE siteshort = ('London');
最佳答案
可能你想要这样的东西:
UPDATE 2018_Cities c JOIN
(SELECT siteshort, SUM(opens) / NULLIF(SUM(RECIPIENTS), 0) as new_openrate
FROM `0118` t
GROUP BY siteshort
) t
ON c.siteshort = t.siteshort
SET c.openRate = new_openrate;
你的逻辑很难理解,但想法是一样的。编写子查询以生成计算。然后使用
JOIN
引入新值。注意
0118
是一个荒谬的表名。您应该修复数据模型中的名称。