#sql #sum #subquery #window-functions
#sql #сумма #подзапрос #окно-функции
Вопрос:
У меня есть таблица itineraire
с 4 столбцами, order
, id_arret
, nom
, temp_moyen
.
итак, я хочу СУММИРОВАТЬ temp_moyen
до id_arret
= X и останавливается
exemple:
если id_arret
= 5, сумма должна быть : 0 5 4 3 6= 18
Комментарии:
1. Я удалил несовместимые теги базы данных.
Ответ №1:
Вы можете использовать where
предложение для фильтрации нужных значений:
select sum(temp_moyen)
from t
where id_arret < ?;
Если вам нужен другой столбец для остановок, скажем nom
, тогда вы можете использовать подзапрос:
select sum(temp_moyen)
from t
where t.order < (select t2.order from t t2 where t2.id_arret = ?);
Комментарии:
1. значение
id_arret
не является упорядоченным, оно может быть 5,10,2,9,3 …2. Во-первых, он упорядочен в ваших образцах данных. Во-вторых, что- то должно указывать порядок. Таблицы SQL представляют собой неупорядоченные наборы. О, я вижу, у вас есть такой столбец, поэтому я изменил второй пример, чтобы показать вам, как его использовать.
Ответ №2:
Я подозреваю, что вы хотите:
select sum(temp_moyen)
from mytable t
where t.ord <= (select t1.ord from mytable t1 where t1.id_arret = 5)
Это идентифицирует ord
то, что соответствует id_arret
5
, а затем суммирует его temp_moyen
со всеми предыдущими строками.
Вы также можете использовать оконные функции:
select sum_temp_moyen
from (
select t.*, sum(temp_moyen) over(order by ord) sum_temp_moyen
from mytable t
) t
where id_arret = 5
Я переименовал order
в ord
, потому что первое зарезервировано практически во всех базах данных (как в order by
).