У меня есть запрос в форме оператора UPDATE. Допустим, это открытая ставка для кампании по электронной почте, в этом примере город - Лондон.
Я хочу запускать этот запрос для 80 городов каждый месяц, и результаты будут представлены в таблице 2018_Cities. Есть ли способ автоматизировать это, чтобы мне не приходилось набирать все города каждый месяц?
Не чувствуйте себя обязанным предоставлять код, вы можете просто указать мне направление процесса, если хотите, и я могу исследовать, но я изо всех сил пытаюсь найти слова, чтобы спросить Google!
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 - нелепое название таблицы. Вы должны исправить имена в своей модели данных.
Спасибо, Гордон, я думаю, это та тема, которая мне нужна, и я рассмотрю возможность использования JOIN в этом случае.
«Выполнить этот запрос» на самом деле никому не помогает понять, что вы пытаетесь сделать.