首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Server表中行间差异的求和

Server表中行间差异的求和
EN

Stack Overflow用户
提问于 2022-01-04 14:58:38
回答 2查看 229关注 0票数 1

我有一张格式的桌子:

代码语言:javascript
运行
复制
SomeID  SomeData

1       3
2       7
3       9
4       10
5       14
6       16
.       .
.       .

我想在这个表中找出行之间的差额之和。即( (7-3) + (10-9) + (16-14) + ....)

这是最好的方法

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-04 15:04:39

使用自连接和模数:

代码语言:javascript
运行
复制
SELECT SUM(t1.SomeData - t2.SomeData) AS total_diff
FROM yourTable t1
INNER JOIN yourTable t2
    ON t1.SomeID = t2.SomeID + 1
WHERE t1.SomeID % 2 = 0;

演示

这个答案假设SomeID序列实际上从1开始,在后面的每一行增加1。如果没有,那么我们可能首先可以在SomeID上应用SomeID并生成1到N序列。

代码语言:javascript
运行
复制
WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY SomeID) rn
    FROM yourTable
)

SELECT SUM(t1.SomeData - t2.SomeData) AS total_diff
FROM cte t1
INNER JOIN cte t2
    ON t1.SomeID = t2.SomeID + 1
WHERE t1.rn % 2 = 0;
票数 3
EN

Stack Overflow用户

发布于 2022-01-04 15:10:17

您可以尝试使用ROW_NUMBER窗口函数来生成序列号,然后使用MOD 2得到您期望的组,然后使用条件聚合函数。

查询1

代码语言:javascript
运行
复制
SELECT SUM(CASE WHEN rn = 0 THEN SomeData END) - SUM(CASE WHEN rn = 1 THEN SomeData END) 
FROM (
  SELECT SomeData,ROW_NUMBER() over(order by SomeID) % 2 rn
  FROM t t1
) t1

结果

代码语言:javascript
运行
复制
|   |
|---|
| 7 |
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70580756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档