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

GCP BigQuery 按Qualifiers与TradeCatogary组合的5分钟多指标聚合查询实现

实现方案

核心逻辑

  • 用条件聚合实现单查询多维度指标输出:在聚合函数内部增加维度匹配规则,无需多表关联,仅扫描一次原表即可得到所有拆分指标
  • 空值默认填0:交易数、交易量、交易金额指标直接通过IF(匹配规则, 统计字段, 0)实现,VWAP额外增加除0防护避免分母为空时报错

完整SQL代码

以下是基于你现有逻辑扩展的示例,你可以根据实际枚举的Qualifiers、TradeCatogary维度值自行扩展或删减对应字段,调整到你需要的21列即可:

SELECT
    TIMESTAMP_SECONDS(CAST((ROUND(UNIX_SECONDS(Date_Time) / 300) * 300) AS int64)) AS timestamp,
    -- 原有全量聚合指标
    count(*) AS tradeCount,
    SUM(Volume) AS totalVolume,
    SUM(Price * Volume) AS dollarTraded,
    IFNULL(SUM(Price * Volume) / NULLIF(SUM(Volume), 0), 0) AS VWAP,
    -- 按Qualifiers=U拆分的指标
    COUNT(IF(Qualifiers = 'U', 1, NULL)) AS count_U,
    SUM(IF(Qualifiers = 'U', Volume, 0)) AS volume_U,
    SUM(IF(Qualifiers = 'U', Price * Volume, 0)) AS dollar_U,
    IFNULL(SUM(IF(Qualifiers = 'U', Price * Volume, 0)) / NULLIF(SUM(IF(Qualifiers = 'U', Volume, 0)), 0), 0) AS VWAP_U,
    -- 按Qualifiers=K拆分的指标
    COUNT(IF(Qualifiers = 'K', 1, NULL)) AS count_K,
    SUM(IF(Qualifiers = 'K', Volume, 0)) AS volume_K,
    SUM(IF(Qualifiers = 'K', Price * Volume, 0)) AS dollar_K,
    IFNULL(SUM(IF(Qualifiers = 'K', Price * Volume, 0)) / NULLIF(SUM(IF(Qualifiers = 'K', Volume, 0)), 0), 0) AS VWAP_K,
    -- 按Qualifiers=U + TradeCatogary=OML拆分的指标
    COUNT(IF(Qualifiers = 'U' AND TradeCatogary = 'OML', 1, NULL)) AS count_U_OML,
    SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'OML', Volume, 0)) AS volume_U_OML,
    SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'OML', Price * Volume, 0)) AS dollar_U_OML,
    IFNULL(SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'OML', Price * Volume, 0)) / NULLIF(SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'OML', Volume, 0)), 0), 0) AS VWAP_U_OML,
    -- 按Qualifiers=U + TradeCatogary=KCL拆分的指标
    COUNT(IF(Qualifiers = 'U' AND TradeCatogary = 'KCL', 1, NULL)) AS count_U_KCL,
    SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'KCL', Volume, 0)) AS volume_U_KCL,
    SUM(IF(Qualifiers = 'U' AND TradeCatogary = 'KCL', Price * Volume, 0)) AS dollar_U_KCL
FROM
    `dbd-sdlc-prod.HKG_NORMALISED.HKG_NORMALISED`
WHERE
    RIC = '1606.HK'
    AND Type="Trade"
    AND Date_Time BETWEEN TIMESTAMP('2016-07-11 00:00:00.000000') AND TIMESTAMP('2016-07-11 23:59:59.999999')
    AND Volume >0
    AND Price >0
GROUP BY 
    ROUND(UNIX_SECONDS(Date_Time) / 300), timestamp
ORDER BY timestamp

补充说明

所有字段的扩展逻辑完全一致,只需要调整IF内的维度匹配条件即可,不需要修改GROUP BY和WHERE逻辑,无匹配数据的时间段对应指标会自动填充0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:36:04