Mysql 基于另一列SQL中的值对一列求平均值

Mysql 基于另一列SQL中的值对一列求平均值,mysql,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 ... 在“买卖”列中,我可以有一个有效的价格、一个0(表示没有数据)或一个无效的价格(见最后一行) 我想计算30天的平均值。我已使用以下查询成功处理0案例: Select ASSET

假设我有以下数据

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
...
在“买卖”列中,我可以有一个有效的价格、一个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\u 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';

.

这里的预期输出是什么?如果您想要平均30天而不考虑有效的class='N',那么您可以使用SUM((NULLIF(BID,0))代替内部select语句中的AVG((NULLIF(BID,0)),并在外部select语句中将A.AVG_BID_30D除以30。