自动重复工会

时间:2019-05-16 17:27:53

标签: 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,因此感谢那些引擎的提示)。

2 个答案:

答案 0 :(得分:3)

使用类似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 

答案 1 :(得分:1)

我强烈建议添加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