[BigQuery] 无法对 SELECT 列表中的字段引用进行 GROUP BY

[BigQuery]Cannot GROUP BY field references from SELECT list

当运行在GoogleBigQuery中使用group by查询语句时,失败,显示

Cannot GROUP BY field references from SELECT list alias xxx

我多次尝试获取它的规则,但都失败了。 我的调查如下:

a> Create tables and insert values

Create table FFNR_A, FFNR_B CREATE TABLE FFNR_A (A1 INT NOT NULL, A2 INT NOT NULL, A3 INT NOT NULL);

CREATE TABLE FFNR_B (B1 INT NOT NULL, B2 INT NOT NULL, B3 INT NOT NULL,B4 INT NOT NULL);

INSERT INTO FFNR_A VALUES (0, 3, 1); INSERT INTO FFNR_A VALUES (1, 0, 2); INSERT INTO FFNR_A VALUES (2, 1, 1); INSERT INTO FFNR_A VALUES (3, 2, 2); INSERT INTO FFNR_A VALUES (5, 3, 0); INSERT INTO FFNR_A VALUES (6, 3, 2); INSERT INTO FFNR_A VALUES (7, 4, 1); INSERT INTO FFNR_A VALUES (8, 4, 3);

INSERT INTO FFNR_B VALUES (1, 1, 2, 0); INSERT INTO FFNR_B VALUES (2, 2, 3, 0); INSERT INTO FFNR_B VALUES (3, 2, 4, 0); INSERT INTO FFNR_B VALUES (4, 1, 5, 0); INSERT INTO FFNR_B VALUES (5, 7, 0, 0); INSERT INTO FFNR_B VALUES (6, 8, 2, 0); INSERT INTO FFNR_B VALUES (7, 7, 1, 0); INSERT INTO FFNR_B VALUES (8, 8, 3, 0); INSERT INTO FFNR_B VALUES (0, 1, 3, 0);

b> Run Query

-- Cannot GROUP BY field references from SELECT list alias B1 at [3:60]
SELECT   A0.`A1`, B1.`B1`,
  FROM `xxx`.`FFNR_B` B1, `xxx`.`FFNR_A` A0
WHERE (A0.`A2` = B1.`B1`) AND (A0.`A2` = B1.`B1`) GROUP BY B1.`B1`,
 A0.`A1`  limit 2;

-- Works
SELECT   A0.`A1`, B1.`B2`,
  FROM `xxx`.`FFNR_B` B1, `xxx`.`FFNR_A` A0
WHERE (A0.`A2` = B1.`B1`) AND (A0.`A2` = B1.`B1`) GROUP BY B1.`B2`,
 A0.`A1`  limit 2;

-- Replace B1->A1 and column A1->A2
-- If use B1(tab), failed either
 SELECT   A0.`A2`, A1.`B1`,
  FROM `xxx`.`FFNR_B` A1, `xxx`.`FFNR_A` A0
WHERE (A0.`A1` = A1.`B1`) AND (A0.`A1` = A1.`B1`) GROUP BY A1.`B1`,
 A0.`A2`  limit 2;

我没有在 BigQuery 文档中找到任何文档。 你能给我一些关于group by规则的建议吗? 要么 这是 BigQuery 中的错误吗?

谢谢

根据评论总结讨论:

-- Cannot GROUP BY field references from SELECT list alias B1 at [3:60] 
SELECT A0.`A1`, B1.`B1`, FROM `xxx`.`FFNR_B` B1, `xxx`.`FFNR_A` A0 
WHERE (A0.`A2` = B1.`B1`) AND (A0.`A2` = B1.`B1`) GROUP BY B1.`B1`, A0.`A1` limit 2;

正如@Mikhail Berlyant 所说,在您的查询中,GROUP BY 因 B1 在输出中是 table 别名和列名而感到困惑。 table/alias 名称不应与 GROUP BY 中的列名称相同。为避免此问题,请使用不同于列名的 table 别名,或者简单地使用 GROUP BY B1、A1 或 GROUP BY 1、2。这是 BigQuery 中的限制,而不是 Bug。有关可分组数据类型的更多信息,请参阅此 doc