sql - 获取 SQL 中列的总和 - 列不是直接来自表,而是已计算
问题描述
我正在用 SQL 构建一个表,并有一个名为“DMA_FEE”的列,这是我从现有表中引入的其他 2 个列相乘的结果。我看到的任何关于对列中的所有值求和的语法都有一个“来自表”的部分,例如 SELECT SUM(column_name) FROM table;
考虑到我已经计算了这个有问题的列,它不是来自表,所以我不能使用这种语法,也看不到任何其他解决方案。到目前为止,这是我的列代码,最后一个是我得到 DMA_FEE 计算的地方。
SELECT A.*,
A.TRANSACTION_ID,
B.AMOUNT,
B.CHARGE_ID,
C.CHARGE_TYPE_ID,
D.CHARGE_GROUP,
E.ACCOUNT_NAME,
F.SIG_ENTITY_LABEL,
E.TRADING_USERID,
E.EXCHANGE_ID,
E.TRADEABLE_INSTR_NAME,
G.INSTR_SUBTYPE_LABEL,
G.UNDERLYING_SYM_BLOOMBERG,
G.FUT_EXPIRATION_DATE,
E.TRADE_DATE,
timestamp_table.timeformated,
A.RATE * A.BASIS_VALUE DMA_FEE
FROM REPLDOADM.IRE_ESTIMATE_TRANS_MAP A
LEFT JOIN REPLDOADM.IRE_CHARGES_ESTIMATE B ON A.ESTIMATE_ID = B.ESTIMATE_ID
LEFT JOIN REPLDOADM.IRE_CHARGES_LU C ON B.CHARGE_ID = C.CHARGE_ID
LEFT JOIN REPLDOADM.ire_charge_types_lU D ON C.CHARGE_TYPE_ID = D.CHARGE_TYPE_ID
LEFT JOIN REPLDOADM.VW_IRE_TRADE_TRANSACTIONS E ON A.TRANSACTION_ID = E.TRANS_ID
LEFT JOIN (
SELECT to_char(create_ts, 'HH24:MI:SS') as timeformated, TRANS_ID
FROM REPLDOADM.VW_IRE_TRADE_TRANSACTIONS) timestamp_table ON (A.TRANSACTION_ID =
timestamp_table.TRANS_ID)
LEFT JOIN REPLDOADM.VW_IRE_ACCOUNTS F ON E.ACCOUNT_NAME = F.PB_ACCOUNT_NAME
LEFT JOIN stig_adm.INSTRUMENT_UNIVERSE G ON E.TRADEABLE_INSTR_NAME = G.SHORT_NAME
WHERE timeformated >= '07:00:00' AND timeformated <= '18:00:00'
AND FUT_EXPIRATION_DATE >= add_months( trunc(sysdate), -12)
想法?
解决方案
如果要显示与其他列一起重复的所有 DMA_FEE 值的总和,请添加SUM(A.RATE * A.BASIS_VALUE) OVER () as DMA_FEE_TOTAL
到 SELECT 子句。这是 SUM() 的分析或窗口函数版本。
如果您只想单独计算总数,则可以将整个查询包装在括号中并将其视为表格(这称为内联视图):
select SUM(DMA_FEE)
from (YOUR ENTIRE QUERY);
如果您想要其他内容,请编辑您的问题以添加所需输出结果的示例。
- 编辑 -
是的,按一组列分组是很常见的。
对于窗口函数,它位于partition by
子句中:
SUM(A.RATE * A.BASIS_VALUE) OVER (partition by TRADEABLE_INSTR_NAME, TRADING_USERID, UNDERLYING_SYM_BLOOMBERG) as DMA_FEE_TOTAL
对于聚合函数,它放在一个group by
子句中。请注意,当您有一个group by
子句时,您的所有 SELECTed 列都需要是(a)按列分组,或(b)聚合函数,如 SUM()
select TRADEABLE_INSTR_NAME,
TRADING_USERID,
UNDERLYING_SYM_BLOOMBERG,
SUM(DMA_FEE) as DMA_FEE_SUBTOTAL
from (YOUR ENTIRE QUERY)
group by TRADEABLE_INSTR_NAME, TRADING_USERID, UNDERLYING_SYM_BLOOMBERG;
推荐阅读
- mysql-8.0 - 尝试在 MySQL 8 中执行过程时出现“命令不同步”错误
- javascript - Mousedown 事件仅在右键单击时触发
- asp.net - System.IO.IOException:指定的服务器无法执行请求的操作
- php - 如何从 select2 中获取值并将其用于下一个 select2
- office-js - Outlook插件:有没有办法在函数文件中以动态方式更改我的插件图标?
- python - 具有所有 Linux 依赖项的可执行 python 程序
- ios - Threejs 3D 对象有时会在 Safari 上消失
- reactjs - 为什么反应路由器中的嵌套路由不起作用?
- python - 在 pandas 数据集中使用 If 语句
- cytoscape.js - 查看当前附加的事件监听器列表