[英]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.