首页 文章

多个小计 - 字段的汇总顺序

提问于
浏览
2

我正在尝试运行一个聚合数据的查询,按几个不同的字段对结果进行分组,并提取 all 相关的"SubTotal"排列 . (类似于MSSQL中的CUBE())

使用 Group By Rollup() 时,我只根据 Rollup 函数中 Group By 字段的顺序获取排列 . 例如,下面的查询(在公共数据集上运行),它按年份,年份和月份,或年,月和奖章返回小计...但它不按小奖章小计 .

SELECT
  trip_year,
  trip_month,
  medallion,
  SUM(trip_count) AS Sum_trip_count
FROM
  [nyc-tlc:yellow.Trips_ByMonth_ByMedallion]
WHERE
  medallion IN ("2R76",    "8J82",    "3B85",    "4L79",    "5D59",    "6H75",    "7P60",    "8V48",    "1H12",    "2C69",    "2F38",    "5Y86",    "5j90",    "8A75",    "8V41",    "9J24",    "9J55",    "1E13",    "1J82")
GROUP BY
  ROLLUP(trip_year,
    trip_month,
    medallion)

我的问题是:我应该怎么做才能在单个查询结果中获得“Sub Totals”的所有不同排列 .

已经尝试过:具有类似查询但具有不同顺序的联盟,它可以工作,但不优雅(它需要太多的工会) . 谢谢

1 回答

  • 1

    你是两个都是正确的 . 在BigQuery中,ROLLUP尊重将列出的字段视为严格排序列表的层次结构 . 在聚合期间,他们的订单不会更改 .

    在其他SQL环境中常见的CUBE聚合是无序的,实际上聚合了其列出的字段的每个可能的顺序/子集 . 目前,还没有在BigQuery中实现 CUBE . 你建议的解决方法也是我建议的 . UNION 来自 ROLLUP 的所有结果集使用其包含的字段的每个排列 . 虽然不理想,但你应该得到相同的结果 .

    简而言之,具有 ROLLUP 字段的不同排列的几个查询的 UNION 是目前实现此目的的 only 方式 . 缺点是你声明这可能很难维护,并且在查询中可能更昂贵 .

    如果您希望在BigQuery中看到 CUBE ,我强烈建议您在Big Query public issue tracker上提交功能请求 . 请务必在此请求中包含完整的用例 .

    UPDATE :为了支持OP提交的feature request,请 star 它,您将收到有关更新的通知 .

相关问题