Google bigquery 错误:选择列表表达式引用在[2:49]创建的列,该列既没有分组也没有聚合
我有一张桌子:t 我的目标是:只提取表中得分最高的id,并按周数分组 查询:Google bigquery 错误:选择列表表达式引用在[2:49]创建的列,该列既没有分组也没有聚合,google-bigquery,Google Bigquery,我有一张桌子:t 我的目标是:只提取表中得分最高的id,并按周数分组 查询: SELECT id, CAST(EXTRACT(WEEK FROM TIMESTAMP_SECONDS(created_utc)) AS STRING) AS week_number, MAX(score) AS highest_score FROM t WHERE body='r/twinpeaks' GROUP BY id; 我得到这个错误: 错误:选择列表表达式引用在[2:49
SELECT id,
CAST(EXTRACT(WEEK FROM TIMESTAMP_SECONDS(created_utc)) AS STRING) AS week_number,
MAX(score) AS highest_score
FROM t
WHERE body='r/twinpeaks'
GROUP BY id;
我得到这个错误:
错误:选择列表表达式引用在[2:49]创建的列,该列既没有分组也没有聚合
我试着这样做:
SELECT id,
CAST(EXTRACT(WEEK FROM TIMESTAMP_SECONDS(created_utc)) AS STRING) AS week_number,
MAX(score) AS highest_score
FROM t
WHERE body='r/twinpeaks'
GROUP BY week_number, id;
但我得到的是:
Row id week_number highest_score
1 dmkb6sv 36 1
2 dn1cd2s 37 2
3 dn43h1k 38 16
4 dn3xf18 38 1
5 dn7i1ko 38 1
6 dnpr9b1 39 1
我想要这个:
Row id week_number highest_score
1 dmkb6sv 36 1
2 dn1cd2s 37 2
3 dn43h1k 38 16
6 dnpr9b1 39 1
您可以尝试在此处使用行号:
这将返回每个周数中得分最高的记录。我在这里假设,你们要么不关心关系,要么关系不会发生。如果您需要处理关系,则可以使用秩函数代替行号。下面是BigQuery标准SQL 标准SQL 选择 从时间戳提取周秒创建utc作为周号, 数组\u按分数描述的聚合顺序限制1[OFFSET0]id, 数组\u按分数描述的分数顺序限制1[OFFSET0]最高\u分数 来自“project.dataset.table” 其中body='r/twinpeaks' 按周分组 按周号订购
提供表中行的简化示例以及预期结果这给了我一个错误:错误:语法错误:在[9:13]处出现意外的关键字顺序@AGuyHasNoName在时间戳\u秒后缺少右括号。请重试我编辑的答案。这将输出所需的结果!非常感谢。
SELECT *
FROM
(
SELECT id,
CAST(EXTRACT(WEEK FROM TIMESTAMP_SECONDS(created_utc)) AS STRING) AS week_number,
score,
ROW_NUMBER() OVER (PARTITION BY
CAST(EXTRACT(WEEK FROM TIMESTAMP_SECONDS(created_utc)) AS STRING)
ORDER BY score DESC) rn
FROM t
WHERE body = 'r/twinpeaks'
) t
WHERE rn = 1;