Google bigquery 错误:选择列表表达式引用在[2:49]创建的列,该列既没有分组也没有聚合

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

我有一张桌子: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 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;