MySQL 如何从MySQL的最近20行中选择5行随机行?

MySQL 如何从MySQL的最近20行中选择5行随机行?

在基于MySQL的应用程序中,经常需要从数据库表中选择随机行或最新20行中的随机行。本文将教你如何使用MySQL查询语句从最新20行中随机选择5行。

阅读更多:MySQL 教程

准备工作

在演示本文的示例之前,需要先准备好一些数据。我们假设你已经有一个名为employees的表,它有以下几个字段:

  • id – Integer类型,主键
  • name – Varchar类型,员工姓名
  • age – Integer类型,员工年龄
  • salary – Integer类型,员工薪水

如果你还没有这个表,可以通过以下SQL语句创建它:

CREATE TABLE employees (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) NOT NULL,
  age INT(11) NOT NULL,
  salary INT(11) NOT NULL,
  PRIMARY KEY (id)
);

接下来,我们将添加一些虚假数据以便演示。

INSERT INTO employees (name, age, salary)
VALUES ('Alice', 25, 50000),
       ('Bob', 30, 60000),
       ('Charlie', 35, 70000),
       ('David', 40, 80000),
       ('Emma', 45, 90000),
       ('Frank', 50, 100000),
       ('Gina', 55, 120000),
       ('Harry', 60, 150000);

方法一:使用ORDER BY和LIMIT

在MySQL中,可以使用ORDER BY和LIMIT子句将查询结果按照给定的顺序排序并限制结果集的大小。下面的查询将返回最新的20个雇员,并对其按照id字段降序排序(最近的员工id最大):

SELECT * FROM employees
ORDER BY id DESC
LIMIT 20;

现在我们可以在结果中随机选择5行。为了实现这一点,我们可以结合MySQL的RAND()函数,使用随机数来指定从结果集中选择的偏移量。以下是查询的完整示例代码:

SELECT * FROM employees
ORDER BY id DESC
LIMIT 20
OFFSET FLOOR(RAND() * 15)
LIMIT 5;

在代码中,RAND()函数生成一个0到1之间的随机数,FLOOR()函数将其舍入到一个整数。我们使用偏移量来指定结果集的开始位置,并使用LIMIT限制结果集的大小。

方法二:使用子查询和RAND()

另一种从MySQL的最近20行中选择随机行的方法是使用子查询和RAND()函数。首先,我们使用子查询获取最新的20个雇员。然后,我们为这个结果集生成一个随机数,用于选择5行数据。以下是查询的完整示例代码:

SELECT *
FROM (
  SELECT *
  FROM employees
  ORDER BY id DESC
  LIMIT 20
) as t
ORDER BY RAND()
LIMIT 5;

在代码中,内部SELECT语句返回最新的20个雇员,并按照id字段降序排序。然后,外部SELECT语句将这个结果集作为t表,并使用RAND()函数将其随机排序,最后输出前5行。

方法三:使用嵌套子查询和RAND()

第三种方法涉及嵌套子查询。内部查询首先选择包含最新20个员工的子集,然后外部查询通过在内部查询结果集中使用RAND()函数来选择5个随机行。以下是查询的完整示例代码:

SELECT *
FROM employees
WHERE id IN (
  SELECT id
  FROM (
    SELECT id
    FROM employees
    ORDER BY id DESC
    LIMIT 20
  ) as t
  ORDER BY RAND()
  LIMIT 5
);

在代码中,内部查询首先选择最新20条记录的id,然后外部查询使用该id列表来选择这些记录。最后,RAND()函数用于在结果集中选择5个随机行。

这是一个比较高级的查询,但是它可以在更大的数据集上更有效地工作,因为它只选择一小部分记录,而不是整个结果集。

结论

以上是三种从MySQL的最近20行中选择随机行的方法。每种方法都有其优点和缺点,具体取决于你的应用程序需要什么样的查询结果。

如果你的数据集很小,第一种方法可能是最简单的方法。如果你的数据集比较大或者需要更好的性能,则可以尝试第二种或第三种方法来获得更好的效果。

无论哪种方法,都可以通过使用MySQL的RAND()函数来实现随机性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程