作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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;
输出:
╔══════╦═════╦═══════════╗
║ 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/
我在 lambda 演算中通过名称类型参数化了术语表示: {-# LANGUAGE DeriveFunctor #-} data Lambda a = Var a | App (Lambda a) (
我是一名优秀的程序员,十分优秀!