如何在 Presto SQL 中为每个类别提取 3 条随机记录?

Hal*_*oKu 1 sql presto

我有下表:

category_id  name
    5         rob
    5         james
    5         kobert
    5         ken
    4         jef
    3         rok
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,为每个类别提供随机 3 个名称。

例如,可能的输出可以是:

category_id  name
    5         rob
    5         james
    5         ken
    4         jef
    3         rok
Run Code Online (Sandbox Code Playgroud)

我知道它应该是这样的:

SELECT category_id, name
FROM(
    SELECT category_id, name, RANDOM() Over (Partition By category_id) rn
    FROM dataset )
WHERE rn<=3
Run Code Online (Sandbox Code Playgroud)

但我找不到执行此操作的正确语法。它给了我

非窗函数:随机

Gor*_*off 6

使用row_number()

SELECT category_id, name
FROM (SELECT category_id, name,
             row_number() Over (Partition By category_id order by random()) as seqnum
      FROM dataset
     )
WHERE seqnum <= 3;
Run Code Online (Sandbox Code Playgroud)

也就是说,random()进入order by.