我正在运行这样的查询:
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