繁体   English   中英

根据另一列SQL中的值对一列取平均值

[英]Average a column based upon the value in another column SQL

假设我有以下数据

SqlUnixTime BID    ASK   VALID ASSET_ID
1504900871  101.50 101.6  Y     XY1
1504900870  0      101.6  Y     XY1
1504900871  101.50 20     N     XY1
...

在BID和ASK列中,我可以输入有效价格,0(表示无数据)或无效价格(请参阅最后一行)。

我想计算30天的平均值。 我设法使用以下查询来处理0情况:

Select ASSET_ID, AVG(NULLIF(BID,0)) as AVG_BID_30D, AVG(NULLIF(ASK,0)) as AVG_ASK_30D FROM myDB.myTable where SqlUnixTime > 1504900870 GROUP BY ASSET_ID;

但是,我将如何仅对VALID =“ Y”的那些值取平均。 我曾想过将where子句放在最后,但可能不会选择无效的asset_id? 我只想要它为空?

更新

按(ASSET_ID,VALID ='Y')分组,然后将结果再次按VALID ='Y'分组

我认为它将起作用。

select A.ASSET_ID, A.AVG_BID_30D, A.AVG_ASK_30D
from (Select ASSET_ID, AVG(NULLIF(BID,0)) as AVG_BID_30D, AVG(NULLIF (ASK,0)) as AVG_ASK_30D, VALID 
FROM myDB.myTable where SqlUnixTime > 1504900870
GROUP BY ASSET_ID, VALID='Y') as A
group by ASSET_ID='Y';

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM