如何在MySQL中查找第n个最大值的记录

时间:2019-11-20 08:52:33  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用各种技术来选择数据库表中的第n条最高记录。

使用MAX或MIN函数很容易选择数据库表中的最高或最低记录。
但是,选择第n个最高记录有点棘手。
例如,从产品表中获得第二昂贵的产品。

要选择第n条最高记录,您需要执行以下步骤:

  • 首先,您获得n个最高记录,并按升序对其进行排序。
    第n个最高记录是结果集中的最后一个记录。

  • 然后,您将结果集按降序排序并得到第一个。

以下是查询以升序获得第n个最高记录:

SELECT 
    *
FROM
    table_name
ORDER BY column_name ASC
LIMIT N;

获取第n个最高记录的查询如下:

SELECT 
    *
FROM
    (SELECT 
        *
    FROM
        table_name
    ORDER BY column_name ASC
    LIMIT N) AS tbl
ORDER BY column_name DESC
LIMIT 1;

幸运的是,MySQL为我们提供了LIMIT子句,该子句限制了返回的结果集中的行数。
您可以将上面的查询重写为以下查询:

SELECT 
    *
FROM
    table_name
ORDER BY column_name DESC
LIMIT n - 1, 1;

查询返回n-1行之后的第一行,因此您获得了第n个最高记录。

获取第n个最高记录示例

例如,如果要在产品表中获得第二昂贵的产品(n = 2),请使用以下查询:

SELECT 
    productCode, productName, buyPrice
FROM
    products
ORDER BY buyPrice DESC
LIMIT 1 , 1;

结果如下:

获得第n个最高记录的第二种技术是使用MySQL子查询:

SELECT *
FROM table_name AS a 
WHERE n - 1 = (
	SELECT COUNT(primary_key_column) 
	FROM products b 
	WHERE  b.column_name > a. column_name)

您可以使用第一种技术来获得与以下查询第二昂贵的产品相同的结果:

SELECT 
    productCode, productName, buyPrice
FROM
    products a
WHERE
    1 = (SELECT 
            COUNT(productCode)
        FROM
            products b
        WHERE
            b.buyPrice > a.buyPrice);

在本教程中,我们向您展示了如何使用MySQL中的LIMIT子句在数据库表中选择第n条记录。