代码之家  ›  专栏  ›  技术社区  ›  user1357015

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

  •  0
  • user1357015  · 技术社区  · 6 年前

    假设我有以下数据

    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;
    

    但是,我如何只对那些有效值取平均值呢?我考虑在结尾放一个WHERE子句,但它可能不会选择无效的资产ID?我只想让它有一个空值?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Agniveer    6 年前

    更新

    按(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';
    

    .