SQL SUM 直到条件
Posted
技术标签:
【中文标题】SQL SUM 直到条件【英文标题】:SQL SUM until condition 【发布时间】:2020-09-27 15:22:24 【问题描述】:我有一个表 itineraire
有 4 个列,order
、id_arret
、nom
、temp_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
5
的ord
,然后将其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 直到条件的主要内容,如果未能解决你的问题,请参考以下文章
mysql SQL语句如何将sum()放在where后面做条件怎么写呢?
具有日期范围条件的 Group By 和 SUM 的 sql