Обновление столбца в таблице на основе нескольких значений выбора - PullRequest
0 голосов
/ 06 октября 2018

Запустив ручной пример в моей IDE, я выбираю среднее значение на основе количества и суммы одного из моих столбцов, например:

SELECT
    sum(velocity)/count(*) as avg
from metrics
   where repnumber = 397
   and material = 1051
   and item = 1150
   and color = 99;

Но я хочу обновить столбец repvelocity на основании вышеизложенного выберите.

Итак, для каждой строки я хочу выбрать столбцы, как указано выше, и установить для repvelocity среднее

Итак, я хочу:

material  |  item  |  color  |  velocity  |  repnumber  |  repvelocity
------------------------------------------------------------------------
1               2       2           5           123          4.2
1               2       2           2           123          4.2
1               2       2           5           123          4.2
1               2       2           4           123          4.2
1               2       2           5           123          4.2

2               3       7           7           123          3.8
2               3       7           2           123          3.8
2               3       7           3           123          3.8
2               3       7           2           123          3.8
2               3       7           5           123          3.8

В основном,У меня есть повторяющиеся строки, потому что столбец «скорость» относится к клиентам.Поэтому везде, где есть комбо из номера, материала, обложки, цвета, я хочу обновить показатель скорости до среднего сверху.

Вы можете видеть, что он просматривал каждую строку, в которой есть материал 1, элемент 2,цвет 2 и номер 123, произвел среднее значение для подсчета / суммы, а затем обновил переполнение для каждой строки.

Есть ли способ, которым я могу выполнить обновление всей таблицы, как это?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Использование функции avg () будет лучшим выбором. Вы можете пойти на что-то подобное, если не хотите использовать avg ().

SELECT a. , aa.repvelocity FROM metricsСОВМЕСТНОЕ СОЕДИНЕНИЕ (ВЫБЕРИТЕ СУММУ (скорость) / СЧЕТЧИК ()), переименуйте из метрик b ГДЕ b.repnumber = 397 И b.material = 1051 И b.item = 1150 И b.color = 99 GROUP BY b.repnumber) aa ON aa.repnumber = a.repnumber;

Я только что использовал repnumber для группировки и вычисления.

0 голосов
/ 06 октября 2018

Вы можете использовать join:

update metrics m join
       (select repnumber, material, item, color, sum(m2.velocity)/count(*) as avg_velocity
        from metrics m2
        group by repnumber, material, item, color
       ) m2
       using (repnumber, material, item, color)
    set m.repvolocity = m2.avg_velocity;

Мне также интересно, почему вы используете sum(velocity)/count(*).Я ожидал бы avg(velocity).Они не точно одинаковы, но отличаются, только если velocity когда-либо NULL.

В большинстве других баз данных вы бы использовали коррелированный подзапрос:

update metrics m
    set repvolocity = (select avg(m2.velocity)
                       from metrics m2
                       where m2.repnumber = m.repnumber and m2.material = m.material and m2.item = m.item and m2.color = m.color
                      );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...