首页 > 解决方案 > 从同一级别查询中除以两个总和

问题描述

嗨,我想按 ATS_MPID 和 Trades_Last_Updated 分组来汇总份额,然后我想将两者相除(ATSSum / Trades_Last_UpdatesSum)。这就是我到目前为止所拥有的......谢谢

 WITH symboltotals AS (
 SELECT Symbol, SUM(Shares) AS SymTot, Trades_Last_Updated
    FROM ATS AS S
    GROUP BY Trades_Last_Updated, Symbol),
atstotals AS (
SELECT Symbol, ATS_MPID, SUM(Shares) as "ATSTotal" 
FROM ATS AS A
GROUP BY ATS_MPID, Symbol)

SELECT *
FROM symboltotals, atstotals
WHERE symboltotals.Symbol = atstotals.Symbol

样本数据:

Symbol  ATS_MPID    Shares  Trades_Last_Updated
A       BIDS        317800  9/17/2018
A       CROS        125508  9/17/2018
A       BIDS        124300  9/10/2018
A       CROS        117419  9/10/2018

我正在尝试获取所有交易股票的每个 ATS_MPID 的百分比。因此,将 BIDS 的符号 A 相加(9/17 和 9/10),对 CROS 执行相同的操作,然后将这些总数除以总份额,以查看它们的个人贡献百分比......即:(BIDS 9/17 的股份 + 股份出价 9/10) / 总股数

标签: sqlsql-server

解决方案


根据数据和您的问题陈述,以下查询将有所帮助

create table yourtable(Symbol varchar(100),  ATS_MPID varchar(100),    Shares bigint, Trades_Last_Updated datetime);
insert into yourtable values
 ('A',  'BIDS',    317800,  '9/17/2018')
,('A',  'CROS',    125508,  '9/17/2018')
,('A',  'BIDS',    124300,  '9/10/2018')
,('A',  'CROS',    117419,  '9/10/2018');


select *,
    percentage=(sum(shares) over (partition by Symbol, ATS_MPID)*100.00)/sum(shares) over (partition by Symbol)
    --,percentagePerLastUpdated=(sum(shares) over (partition by Symbol, ATS_MPID, Trades_Last_Updated)*100.00)/sum(shares) over (partition by Symbol)
from yourtable

也见live demo


推荐阅读