Новый столбец на основе суммы другого столбца - PullRequest
0 голосов
/ 29 декабря 2018

Привет, ребята! Я хочу создать столбец на основе суммы другого столбца. Допустим, у меня есть эта таблица

Employee
id      iddepartment    idhostel     valuedepartment    
1       1               1                   15              
2       2               1                   15              
3       3               1                   15              
4       4               2                   10              
5       5               2                   10              
6       6               2                   10              

Я хочу создать еще одну таблицу с вычисляемым столбцом (сумма значений группа отделов по idhostel)это выглядит примерно так

Employee
id      iddepartment    idhostel     valuedepartment            valuehostel   
1       1               1                   15                      45
2       2               1                   15                      45 
3       3               1                   15                      45
4       4               2                   10                      30
5       5               2                   10                      30 
6       6               2                   10                      30  

Есть способ, которым я могу сделать это, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Пример предполагает, что вам нужна сумма valuedepartment за idhostel.Вы можете получить это, используя подзапрос.

SELECT e1.id,
       e1.iddepartment,
       e1.idhostel,
       e1.valuedepartment,
       (SELECT sum(e2.valuedepartment)
               FROM employee e2
               WHERE e2.idhostel = e1.idhostel) valuehostel
       FROM employee e1;

Я не рекомендую сохранять это.Вы всегда можете запросить его, как показано выше, чтобы вы могли получить информацию.Однако постоянные значения, рассчитанные на основе других данных, несут риск несоответствий, и их следует избегать, если это возможно.В противном случае нужно быть очень осторожным, чтобы избежать несоответствий.

Но вы можете использовать представление, которое вы можете запросить, как таблицу.

CREATE VIEW employees_with_valuehostel
AS
SELECT e1.id,
       e1.iddepartment,
       e1.idhostel,
       e1.valuedepartment,
       (SELECT sum(e2.valuedepartment)
               FROM employee e2
               WHERE e2.idhostel = e1.idhostel) valuehostel
       FROM employee e1;

Затем вы можете запросить представление.

SELECT *
       FROM employees_with_valuehostel;

даст вам тот же результат, что и запрос выше.

0 голосов
/ 29 декабря 2018

Вы хотите создать новый столбец в своей таблице, а затем обновить его содержимое из других столбцов:

ALTER TABLE my_table ADD COLUMN my_sum INT;

UPDATE my_table SET my_sum = value1 + value2;

В вашем случае использования соответствующий запрос выглядит так:

UPDATE my_table as t1
INNER JOIN (
    SELECT idhostel, SUM(valuedepartment) AS sum_dpt
    FROM my_table
    GROUP BY idhostel
) t2 on t2.idhostel = t1.idhostel
SET t1.valuehostel = t2.sum_dpt
...