我有一个更新语句形式的查询。假设这是电子邮件活动的公开价格,在本例中,城市是伦敦。
我想每月对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是一个荒谬的表名。您应该修复数据模型中的名称。

10-06 06:18