Как выполнить udapte с подзапросом и groupby?

#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 есть еще один