СУММА SQL до состояния

#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 ).