gpt4 book ai didi

sql - SQL Server 中 SUM() 的对应项是什么?

转载 作者:行者123 更新时间:2023-12-02 04:11:27 25 4
gpt4 key购买 nike

SQL Server 中,您可以执行 sum(field1) 来获取与 groupby 子句匹配的所有字段的总和。
但我需要减去字段,而不是求和。
是否可以使用 subtract(field1) 之类的东西来代替 sum(field1) ?

例如,table1 有以下内容:

name field1  
A 1
A 2
B 4

查询:

select name, sum(field1), subtract(field1)  
from table1
group by name

会给我:

A 3 -1  
B 4 4

我希望我的问题很清楚。

编辑:

还有一个我可以使用的排序字段。这可以确保值 1 和 2 始终会导致 -1 而不是 1。

我需要减去 A 的所有值,在我的示例中为 1 - 2 = -1

编辑2:如果 A 组的值为 1、2、3、4,则结果必须为 1 - 2 - 3 - 4 = -8

最佳答案

假设您有一些列来指示顺序,要选择每组的第一个元素,您可以使用窗口函数来计算您的减法:

CREATE TABLE tab(ID INT IDENTITY(1,1) PRIMARY KEY, name CHAR(1), field1 INT);
INSERT INTO tab(name, field1) VALUES ('A', 1), ('A', 2), ('B', 4);

SELECT DISTINCT
name
,[sum] = SUM(field1) OVER (PARTITION BY name)
,[substract] = SUM(-field1) OVER (PARTITION BY name)
+ 2*FIRST_VALUE(field1) OVER(PARTITION BY name ORDER BY ID)
FROM tab;

LiveDemo

输出:

╔══════╦═════╦═══════════╗
║ name ║ sum ║ substract ║
╠══════╬═════╬═══════════╣
║ A ║ 3 ║ -1 ║
║ B ║ 4 ║ 4 ║
╚══════╩═════╩═══════════╝

警告:

FIRST_VALUE 可从 SQL Server 2012+

关于sql - SQL Server 中 SUM() 的对应项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com