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

时间:2018-05-23 18:21:11

标签: mysql

假设我有以下数据

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?我只是希望它有一个空?

1 个答案:

答案 0 :(得分:1)

已更新

将其分组(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';