根据另一列sql中的值对一列求平均值

qxsslcnc  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(400)

假设我有以下数据

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子句,但它可能不会选择无效的资产标识?我只想它有一个空值?

x33g5p2x

x33g5p2x1#

更新
按(asset\u 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';

.

相关问题