[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。
当运行在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。