MySQL обновить или вставить в другую таблицу, используя подзапрос, который возвращает х количество строк - PullRequest
2 голосов
/ 26 июня 2019

Я пытался около 8 часов, но безрезультатно.Я пытаюсь обновить или вставить AVG от 2 до 10 строк из одного столбца в другую таблицу.

Код, который я сейчас использую для вычисления среднего.

SELECT COUNT(*), NAME, AVG(AVERAGE) FROM table1 GROUP BY NAME ORDER BY NAME;

Это возвращаетправильные результаты, так как я использовал group by в качестве обходного пути, но теперь мне нужно перенести эти данные в другую таблицу.

Однако, когда я пытаюсь запустить update или вставить mysql, всегда жалуется на многострочный возврат подзапроса.

Как я могу получить это в table2, где имя совпадает, и в среднее значение столбца для table2?Имя на 100% уникально.Я также хотел бы, чтобы имена совпадали.Это будет обновляться, возможно, один раз в день.

РЕДАКТИРОВАТЬ: Первая таблица ENTRY_ID, ИМЯ (не уникально для нескольких записей), СРЕДНЯЯ таблица вторая имеет ИД (уникальный), ИМЯ (уникальный), СРЕДНИЙ

Я пробовал так много запросов, это не смешно, я искал всю документацию, я просто не собираю что-то правильно.

Когда вы запускаете вышеприведенное, у него может быть 8 строк, он запускает AVG (AVERAGE), возможно, 6 они совпадают по имени.

Я хочу сохранить их в table2, где имя в table1 совпадает симя в таблице 2, но просто дает единственное среднее значение вышеупомянутого запроса.

Спасибо

РЕДАКТИРОВАТЬ2: Это код, который работал

INSERT INTO table2 (NAME, AVERAGE) (SELECT * FROM (SELECT NAME, AVG(AVERAGE) as AVERAGE FROM table1 GROUP BY NAME) main_query) ON DUPLICATE KEY UPDATE table2.AVERAGE = main_query.AVERAGE;

Благодаря @ ARubiksCube

1 Ответ

1 голос
/ 26 июня 2019

Я не уверен в том, что является вашим настоящим сообщением об ошибке. Я предполагаю, что вы используете более новую версию MYSQL, поэтому вы получаете эту ошибку.

Этот запрос обновит все записи в таблице2 значениями из таблицы1. Если запись не существует, она будет вставлена. Если запись существует, она будет обновлена.

INSERT INTO table2 (NAME, AVERAGE)
SELECT *
FROM
(SELECT NAME, AVG(AVERAGE) as AVERAGE
FROM table1
GROUP BY NAME) main_query
ON DUPLICATE KEY
UPDATE table2.AVERAGE = main_query.AVERAGE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...