postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个
Posted
技术标签:
【中文标题】postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个【英文标题】:postgresql partition large dataset and random select 3 from a category 【发布时间】:2016-02-03 10:30:51 【问题描述】:我是数据库编程或一般编程方面的新手。 但我希望你能帮助我。
我有一个大约有 900 万行的数据库,并且有一个名为 category 的列。有些行属于同一类别,可能有 10 行,而其他行可能只有 1 或 2。
我想创建一个新表,其中从同一类别中随机选择三行。基本上过滤或排除其余部分。
如果有少于 3 行的类别,则只会选择可用的行。
我在论坛上环顾四周,一位朋友告诉我,我需要使用 PARTITION 执行此操作。我尝试了以下方法,但这并没有达到我想要的效果。非常感谢任何帮助。
Create table test as
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
FROM data2016 ) sub
WHERE rn = 1;
【问题讨论】:
改成where rn <= 3
不敢相信这么简单。非常感谢它的工作。
作为答案发布
【参考方案1】:
大概:
SELECT *
FROM (
SELECT *, row_number() OVER (PARTITION BY category ORDER BY random()) as rn
FROM data2016
) sub
WHERE rn <= 3;
【讨论】:
以上是关于postgresql 对大型数据集进行分区并从一个类别中随机选择 3 个的主要内容,如果未能解决你的问题,请参考以下文章
Apache Spark 使用 SQL 函数 nTile 对数据进行分区
通过 PostgreSQL 数据库聚合大型(数十亿行)数据集