SQL Server - 对整个列求和并分组

标签 sql sql-server

假设我在 SQL Server 中有下表:

grp:     val:     criteria:
a        1        1
a        1        1
b        1        1
b        1        1
b        1        1
c        1        1
c        1        1
c        1        1
d        1        1

现在我想要的是得到一个输出,基本上是:

Select grp, val / [sum(val) for all records] grouped by grp where criteria = 1

因此,鉴于以下情况为真:

Sum of all values = 9
Sum of values in grp(a) = 2
Sum of values in grp(b) = 3
Sum of values in grp(c) = 3
Sum of values in grp(d) = 1

输出如下:

grp:     calc:    
a        2/9        
b        3/9        
c        3/9        
d        1/9

我的 SQL 应该是什么样子?

谢谢!!

最佳答案

你应该能够使用像这样的东西,它使用 sum() over() :

select distinct grp,
  sum(val) over(partition by grp)
    / (sum(val) over(partition by criteria)*1.0) Total
from yourtable 
where criteria = 1

参见SQL Fiddle with Demo

结果是:

| GRP |          TOTAL |
------------------------
|   a | 0.222222222222 |
|   b | 0.333333333333 |
|   c | 0.333333333333 |
|   d | 0.111111111111 |

关于SQL Server - 对整个列求和并分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363238/

相关文章:

c# - 关于INNER JOIN的正确使用

sql - 如何在特定字段SQL中按已知数据顺序的表进行二分查找

sql-server - SQL - SUM-CASE-除以零错误

c# - 将 DataTable 作为参数传递给存储过程

sql - 将一列的前一行的值添加到当前行的另一列

每组多个组的SQL总和

mysql - 如何优化包含大量 JOINS 的 SELECT 查询?

mysql - 从新列中的两个表中减去两列

sql-server - 如何从另一个容器连接到 SQL Server docker 容器?

sql-server - SQL Server - 同一页如何被两个进程独占(X)锁定?