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

MySQL中SELECT * GROUP BY写法,在BigQuery中如何最简实现?

在BigQuery中实现类似MySQL GROUP BY非标准行为的最简方式

MySQL里SELECT * FROM table GROUP BY col1, col2的逻辑是按col1, col2分组后返回每个分组内的任意一行数据,这是MySQL的非标准SQL扩展。在遵循标准SQL的BigQuery中,有两种简便实现方式:

方式一:窗口函数筛选分组行(推荐,适合多列场景)

这种方式无需逐个指定非分组列,直接保留所有字段:

WITH grouped_data AS (
  SELECT 
    *,
    ROW_NUMBER() OVER (PARTITION BY col1, col2) AS rn
  FROM `your-project.your-dataset.your-table`
)
SELECT * EXCEPT(rn)
FROM grouped_data
WHERE rn = 1;
  • 逻辑:用PARTITION BY col1, col2分组,ROW_NUMBER()给每组内的行编号,取编号为1的行(即每组任意一行)。
  • 优势:不用手动列出所有非分组列,适合表有大量字段(比如100列)的场景。

方式二:使用ANY_VALUE聚合函数

如果需要显式处理每个非分组列,可以用BigQuery内置的ANY_VALUE函数:

SELECT
  col1,
  col2,
  ANY_VALUE(col3) AS col3,
  ANY_VALUE(col4) AS col4,
  -- 依次添加其他所有非分组列
FROM `your-project.your-dataset.your-table`
GROUP BY col1, col2;
  • 逻辑:ANY_VALUE会返回分组内某一行的对应列值,和MySQL的非标准行为逻辑一致。
  • 局限:列数很多时需要逐个列出,不如窗口函数高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:13:14