You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中基于VALID列值计算BID和ASK列的30日平均值

解决方案

你需要用条件聚合来实现这个需求——不在WHERE子句里过滤VALID='Y'(那样会直接排除掉没有有效行的ASSET_ID),而是在聚合函数内部只对VALID='Y'的行进行计算,同时保留所有ASSET_ID的分组。

修改后的查询如下:

SELECT 
    ASSET_ID,
    AVG(CASE WHEN VALID = 'Y' THEN NULLIF(BID, 0) END) AS AVG_BID_30D,
    AVG(CASE WHEN VALID = 'Y' THEN NULLIF(ASK, 0) END) AS AVG_ASK_30D
FROM myDB.myTable 
WHERE SqlUnixTime > 1504900870 
GROUP BY ASSET_ID;

逻辑解释:

  • CASE WHEN VALID = 'Y' THEN NULLIF(BID, 0) END:只对VALID='Y'的行处理BID值(把0转为NULL),其他行这部分结果直接是NULL。
  • AVG()函数会自动忽略NULL值,所以最终只会计算符合VALID='Y'且BID/ASK≠0的行的平均值。
  • 因为没有在WHERE里过滤VALID,所以所有满足时间条件的ASSET_ID都会被保留在分组结果里;如果某个ASSET_ID没有任何VALID='Y'的有效行,对应的平均值就会是NULL,完全符合你的要求。

内容的提问来源于stack exchange,提问作者user1357015

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:13