我需要创建一个计算某些数据的SQL查询。 例如,我有这样的SQL查询:
SELECT SUM(AMOUNT) FROM FIRMS WHERE FIRM_ID IN(....) GROUP BY FIRM;
产生这样的数据:
28,740,573
30,849,923
25,665,724
43,223,313
34,334,534
35,102,286
38,556,820
19,384,871
现在,在第二列中,我需要显示一个条目与所有条目之和之间的关系。像那样:
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
例如,上面第一列的所有条目的总和将是255,858,044
,第一个条目,第二个单元格中的值将是28,740,573 / 255,858,044 = 0.1123
。对于结果中的每个条目都是一样的。
我该怎么做?
UPD:谢谢@a_horse_with_no_name,我忘记了DBMS。这是甲骨文。
答案 0 :(得分:6)
现在大多数数据库都支持ANSI标准窗口函数。所以,你可以这样做:
SELECT SUM(AMOUNT),
SUM(AMOUNT) / SUM(SUM(AMOUNT)) OVER () as ratio
FROM FIRMS
WHERE FIRM_ID IN (....)
GROUP BY FIRM;
注意:某些数据库会进行整数除法。因此,如果AMOUNT
是一个整数,那么您需要在这些数据库中转换为非整数。一种简单的方法是1.0乘以。