SQL单位值和按组累计和

标签 sql

我对 SQL 还是个新手,对此有点困惑。我将不胜感激任何帮助或建议。我有一个包含值列和 ID 列的表,然后按值列降序排列。即:

Value   | ID   
12      | A  
09      | A  
08      | B  
08      | C  
07      | A  
06      | B  
03      | B  
01      | C  

我正在尝试做两件事:

  1. 对于每一行,计算其各自 ID 占总和的百分比。第 1 行为 12/(12+9+7),第 2 行:3/(12+9+7),第 3 行:8/(8+6+3),等等。
  2. 计算每个 ID 在 (1) 中计算的百分比的运行总和。本质上只是每个 ID 的累加和。

输出看起来像这样。

Value | ID | UnitValue | RunningTotal  
-------------------------------------
  12  | A  | 0.43      | 0.43  
  09  | A  | 0.32      | 0.75  
  08  | B  | 0.47      | 0.47  
  08  | C  | 0.89      | 0.89  
  07  | A  | 0.25      | 1.00  
  06  | B  | 0.35      | 0.82  
  03  | B  | 0.18      | 1.00  
  01  | C  | 0.11      | 1.00  

最佳答案

对于 SQL Server 2008

;WITH CTE 
AS
(
    SELECT
        Value
        ,ID
        ,CONVERT(DECIMAL(10,2),Value/CONVERT(DECIMAL(10,2),SUM(Value) OVER(PARTITION BY [ID]))) AS [Unit Value]
    FROM
        Table1 

)

SELECT a.Value,a.ID,a.[Unit Value], (SELECT SUM(b.[Unit Value])
               FROM   CTE b
               WHERE a.ID = b.ID AND b.[Unit Value] <= a.[Unit Value]) AS [RunningTotal]
FROM   CTE a
ORDER  BY a.ID,[RunningTotal]

SQL FIDDLE DEMO

关于SQL单位值和按组累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117369/

相关文章:

sql - oracle中有没有固定字符串长度的函数?

mysql - 如何使用mySQL使用group by删除数据库中的记录

java - 如何将 Java 桌面应用程序连接到在线数据库

mysql - 从 DATETIME 字段中选择最常见的月份

MySQL 日期之间

sql - 我如何在 postgresql 中使用更新和 json 填充记录?

MySQL,如何从表中散列一列并将其移动到另一个表?

sql - 了解有关约束性质的更多信息?

sql - 复合主键中使用的外键

java - 无法在两个方法内传递 try catch block 返回值