#mysql #sql
#mysql #sql
Вопрос:
У меня есть 2 таблицы, моя первая таблица с именем «popa» содержит отделы, моя вторая таблица «stat» содержит статистику, если я выполняю внутреннее объединение 2, я получаю хорошие результаты, которые я хотел бы поместить в столбец «из» моей таблицы «popa».
SELECT dep, sum(i_d) FROM popa INNER JOIN stat on popa.num_dep = stat.dep group BY dep
Я попробовал что-то вроде
UPDATE popa
SET pourcentagedeces = s from
(SELECT dep as d, sum(i_d)as s
FROM popa INNER JOIN stat on popa.num_dep = stat.dep group BY d)
WHERE dep = d
на самом деле я немного растерялся
, как вы можете видеть, я пробовал, что вы сказали, но это не сработало
введите описание изображения здесь
Спасибо, Стеф
Комментарии:
1. Зачем вам столбец для сохранения вычисленных данных? Вы не должны сохранять% или СУММУ. Что, если данные изменятся? Вы обновляете каждый раз? Почему?
2. данные не изменятся, и мне действительно нужно сохранить их для анализа
Ответ №1:
Вы должны использовать ОБНОВЛЕНИЕ с несколькими таблицами:
UPDATE popa
JOIN (SELECT dep num_dep, SUM(i_d)as s
FROM stat
GROUP BY num_dep) stats USING (num_dep)
SET popa.pourcentagedeces = stats.s;
Комментарии:
1. это говорит об усечении неправильного ДВОЙНОГО значения: »
2. Проверка @
stat.i_d
popa.num_dep
louisdefunes31 иstat.dep
столбцов на наличие пустых строковых значений… некоторые из них являются VARCHAR?
Ответ №2:
Как указано в комментариях, это избыточное хранилище агрегатов, но —
UPDATE `popa`
INNER JOIN (
SELECT `dep`, SUM(`i_d`) AS `s`
FROM `stat`
GROUP BY `dep`
)AS `agg` ON `popa`.`num_dep` = `agg`.`dep`
SET `pourcentagedeces` = `agg`.`s`;
Ответ №3:
Это то, что вам нужно?
Вы используете UPDATE JOIN
, где один p1 — это таблица, а p2 — это подзапрос, к которому присоединяется условие.
UPDATE popa p1 JOIN ( SELECT dep, sum(incid_dchosp) as s FROM popa INNER JOIN stat on popa.num_dep = stat.dep group BY dep ) p2 ON p1.dep = p2.dep
SET p1.pourcentagedeces = p2.s
Комментарии:
1. я пытался это сделать, но по какой-то неясной причине рядом с ‘FROM’ появляется ошибка
2. @louisdefunes31 позвольте мне увидеть ваш запрос. Вы используете псевдоним?
3. ОБНОВИТЕ p1, УСТАНОВИТЕ p1.pourcentagedeces = p2.s ИЗ popa p1 JOIN (ВЫБЕРИТЕ dep, sum(incident_dchosp) как s ИЗ popa INNER JOIN stat на popa.num_dep = stat.dep group ПО dep) p2 НА p1.dep = p2.dep
4. @louisdefunes31 Пожалуйста, просмотрите мое обновление. Для синтаксиса mysql есть еще один