自动重复工会

  • 本文关键字: sql hive presto
  • 更新时间 :
  • 英文 :


我正在运行这样的查询:

SELECT id FROM table
WHERE table.type IN (1, 2, 3)
LIMIT 15

这返回随机抽样。我可能有来自class_1的7个项目和class_2的3个项目。我想从每个类中返回5个项目,以下代码有效:

SELECT id FROM (
SELECT id, type FROM table WHERE type = 1 LIMIT 5
UNION
SELECT id, type FROM table WHERE type = 2 LIMIT 5
UNION ...
ORDER BY type ASC)

,如果我想从十个类中进行随机抽样,而不仅仅是三个,那么这会变得笨拙。做这个的最好方式是什么?

(我正在使用presto/hive,因此对这些引擎的任何提示都将不胜感激(。

使用row_number这样的函数来执行此操作。这使得选择独立于类型的数量。

SELECT id,type
FROM (SELECT id, type, row_number() over(partition by type order by id) as rnum --adjust the partition by and order by columns as needed
      FROM table
     ) T 
WHERE rnum <= 5 

我强烈建议添加 ORDER BY。无论如何,您可以做类似的事情:

with
x as (
  select
    id,
    type,
    row_number() over(partition by type order by id) as rn
  from table
)
select * from x where rn <= 5

相关内容

  • 没有找到相关文章

最新更新