使用第一列中的数据计算第二列中的数据

Pet*_*ila 0 sql oracle

我需要创建一个计算一些数据的SQL查询.例如,我有这样的SQL查询:

SELECT SUM(AMOUNT) FROM FIRMS WHERE FIRM_ID IN(....) GROUP BY FIRM;
Run Code Online (Sandbox Code Playgroud)

产生这样的数据:

28,740,573
30,849,923
25,665,724
43,223,313
34,334,534
35,102,286
38,556,820
19,384,871
Run Code Online (Sandbox Code Playgroud)

现在,在第二列中,我需要显示一个条目与所有条目之和之间的关系.像那样:

28,740,573 | 0.1123
30,849,923 | 0.1206
25,665,724 | 0.1003
43,223,313 | 0.1689
34,334,534 | 0.1342
35,102,286 | 0.1372
38,556,820 | 0.1507
19,384,871 | 0.0758
Run Code Online (Sandbox Code Playgroud)

例如,上面第一列的所有条目的总和将是255,858,044第一个条目,第二个单元格中的值28,740,573 / 255,858,044 = 0.1123.对于结果中的每个条目都是相同的.

我怎样才能做到这一点?

UPD:谢谢@a_horse_with_no_name,我忘记了DBMS.这是甲骨文.

Gor*_*off 6

大多数数据库现在支持ANSI标准窗口函数.所以,你可以这样做:

SELECT SUM(AMOUNT),
       SUM(AMOUNT) / SUM(SUM(AMOUNT)) OVER () as ratio
FROM FIRMS
WHERE FIRM_ID IN (....)
GROUP BY FIRM; 
Run Code Online (Sandbox Code Playgroud)

注意:某些数据库执行整数除法.因此,如果AMOUNT是整数,则需要在这些数据库中转换为非整数.一种简单的方法是1.0乘以.

  • Oracle甚至提供了一个内置函数:`RATIO_TO_REPORT(AMOUNT)OVER()作为ratio`,参见[RATIO_TO_REPORT](http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions124. HTM) (4认同)