暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL小技巧2:随机查询n条数据

跟强哥学SQL 2023-12-09
310

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

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

方法一:使用 RAND() 函数
最直接的方法是使用 SQL 的 RAND() 函数对数据进行随机排序,然后取前 N 条。
基本语法如下:
    SELECT * 
    FROM table_name
    ORDER 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_name
        ORDER BY NEWID();
        NEWID() 和 RAND() 不同,它不会因为读取一次而改变它的输出值。
        使用示例:在 users 表中随机查找5个用户。
          SELECT TOP 5 * 
          FROM table_name
          ORDER BY NEWID();
          方法三:使用 TABLESAMPLE 组合函数
          TABLESAMPLE 可以用于从表中随机选择指定比例的行。我们可以先使用 TABLESAMPLE 获取大致的比例,再使用 LIMIT 获取确切的数量。
          基本语法如下:
            SELECT * FROM table_name
            TABLESAMPLE(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()
                ) tmp
                LIMIT 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()
                  ) tmp
                  LIMIT 5;

                  【SQL笔试题免费领取】


                  关注公众号【跟强哥学SQL】,回复关键字【笔试】获取链接。


                  文章转载自跟强哥学SQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论