使用分区SQL生成一个以上记录的标量子查询



我有两行数据,如下所示:

group_id    item_no
weoifne     1
weoifne     2

我想检索每个group_id的最大item_no。我正在使用这个查询:

SELECT MAX(item_no)
OVER (PARTITION BY group_id)
FROM my_table;

我只需要一条记录,因为我将这个查询嵌入到CASE WHEN语句中,以便根据item_no是否是每个组的最高值来应用逻辑。

期望输出:

2

实际输出:

2
2

如何将查询修改为每个group_id只输出一条最大item_no的记录?

使用聚合函数和GROUP BY,而不是窗口函数。

窗口函数,也称为分析函数,计算一组行上的值,并为每行返回一个结果。这与聚合函数不同,聚合函数为一组行返回单个结果。

  • https://cloud.google.com/bigquery/docs/reference/standard-sql/window-function-calls
SELECT group_id, MAX(item_no)
FROM my_table
GROUP BY group_id;

如果您仍然想使用窗口函数,可以在脚本中使用DISTINCT来消除重复项,如下所示。DISTINCT适用于所有列

SELECT  DISTINCT    group_id
, MAX(item_no) OVER (PARTITION BY group_id)
FROM                my_table

最新更新