#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;