【微信公众号:跟强哥学SQL】

在我们实际的数据处理工作中,有时需要从表中随机抽取数据进行分析。SQL 为我们提供了多种方法来实现这一需求。

下面我为大家详细介绍其中四种常见的抽样方法,并给出实际的例子。

方法一:使用 RAND() 函数

最直接的方法是使用 SQL 的 RAND() 函数对数据进行随机排序,然后取前 N 条。

基本语法如下:

SELECT * FROM table_nameORDER BY RAND()LIMIT N;

RAND() 函数生成一个介于 0 到 1 之间的随机浮点数。通过 ORDER BY RAND() ,可以随机排序所有结果,然后使用 LIMIT N 取出前 N 条。

这种方法虽然简单易用,但在数据表行数较多时可能会导致执行效率下降。

使用示例:在 users 表中随机查找5个用户。

SELECT * FROM users ORDER BY RAND() LIMIT 5

方法二:使用 NEWID() 函数

NEWID() 是 SQL Server 中用于生成唯一标识符的函数。它每次都会生成新的值,因此可以用来随机排序。

基本语法如下:

SELECT TOP(N) * FROM table_nameORDER BY NEWID();

NEWID() 和 RAND() 不同,它不会因为读取一次而改变它的输出值。

使用示例:在 users 表中随机查找5个用户。

SELECT TOP 5 * FROM table_nameORDER BY NEWID();

方法三:使用 TABLESAMPLE 组合函数

TABLESAMPLE 可以用于从表中随机选择指定比例的行。我们可以先使用 TABLESAMPLE 获取大致的比例,再使用 LIMIT 获取确切的数量。

基本语法如下:

SELECT * FROM table_nameTABLESAMPLE(10 PERCENT)LIMIT N;

需要注意的是,这个方法并不能精准地选择 N 条数据,因为 TABLESAMPLE 的执行结果与表中实际数据量有关。

另外, TABLESAMPLE仅用于HIVE数据库。

使用示例:在 users 表中随机查找5个用户。

SELECT * FROM users TABLESAMPLE(10 PERCENT)LIMIT 5;

方法四:使用 distribute by rand() + sort by rand()

在 Hive SQL 中,还可以使用 `distribute by rand()` ,再配合 `sort by rand()` 进行数据的随机抽样:

基本语法如下:

SELECT * FROM (    SELECT *, rand() as random    FROM table_name    DISTRIBUTE BY rand()    SORT BY rand()) tmpLIMIT N;

`distribute by rand()` 可以保证随机数的分布均匀,而 `sort by rand()` 则在均匀地基础上做排序,再用 LIMIT 就可以获得随机的N条数据了。

使用示例:在 users 表中随机查找5个用户。

SELECT * FROM (    SELECT *, rand() as random    FROM table_name    DISTRIBUTE BY rand()    SORT BY rand()) tmpLIMIT 5;

【微信公众号:跟强哥学SQL】 

12-07 11:40