Множественный ВЫБОР с последующим множественным ОБНОВЛЕНИЕМ

#sql #sql-server #select #sql-update #average

#sql #sql-сервер #выберите #sql-обновление #среднее

Вопрос:

У меня есть две таблицы — 1-я таблица gas_emissions , 2-я таблица — regiony_avg .

Таблица gas_emissions содержит столбцы region , region_id , data_val , year .

Таблица regiony_avg содержит столбцы region_id , avg_region .

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

Существует более 10 регионов, что я сделал

 SELECT AVG(data_val) AS AKL 
FROM gas_emissions 
WHERE region_id = 'AKL'
 

и затем

 UPDATE regiony_avg 
SET avg_region = 1999.64771428571 
WHERE region_id = 'AKL'
 

Я сделал это для каждого из регионов. Однако я не вижу, как это сделать, если есть, например, 1000 регионов. Есть ли какой-нибудь способ получить среднее значение для всех уникальных regions at, а затем вставить его regiony_avg сразу?

введите описание изображения здесь

Ответ №1:

Я думаю, вы просто хотите insert . . . select :

 insert into regiony_avg (region_id, avg_region)
    selet region_id, avg(data_val)
    from gas_emissions
    group by region_id;
 

Примечание: я не вижу особых причин хранить эту информацию в таблице, когда ее можно легко вычислить с помощью запроса агрегации. Фактически, вы можете добавить среднее значение к каждой строке исходной таблицы, используя оконные функции:

 select ge.*,
       avg(data) over (partition by region_id) as region_avg
from gas_emissions ge;