SQL SUM 直到条件

Posted

技术标签:

【中文标题】SQL SUM 直到条件【英文标题】:SQL SUM until condition 【发布时间】:2020-09-27 15:22:24 【问题描述】:

我有一个表 itineraire 有 4 个列,orderid_arretnomtemp_moyen

所以我想SUM temp_moyen 直到 id_arret = X 并停止

例子:

如果id_arret=5,SUM 应该是:0+5+4+3+6= 18

【问题讨论】:

我删除了不一致的数据库标签。 【参考方案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 = ?);

【讨论】:

id_arret 没有排序,可以是 5,10,2,9,3 ... 首先,它在您的示例数据中排序。其次,something 必须指定排序。 SQL 表代表 无序 集。哦,我看到你有这样一个专栏,所以我修改了第二个例子来告诉你如何使用它。【参考方案2】:

我怀疑你想要:

select sum(temp_moyen)
from mytable t
where t.ord <= (select t1.ord from mytable t1 where t1.id_arret = 5)

这标识了对应于id_arret 5ord,然后将其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)。

【讨论】:

以上是关于SQL SUM 直到条件的主要内容,如果未能解决你的问题,请参考以下文章

do while“直到”型循环

mysql SQL语句如何将sum()放在where后面做条件怎么写呢?

具有日期范围条件的 Group By 和 SUM 的 sql

满足 2 个条件的 SQL SUM 值

SQL Server - 将条件链接到原始行的 SUM 前面的行

SQL Server SUM IF 使用具有多个条件的窗口函数