我正在运行这样的查询:
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,因此感谢那些引擎的提示)。
答案 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