MySQL選擇第n個最高紀錄

2019-10-16 22:57:01

在本教學中,您將學習如何使用各種技術選擇資料庫表中第n個最高記錄。

使用MAXMIN函式可以輕鬆選擇資料庫表中最高或最低的記錄。但是,選擇第n個最高紀錄有點棘手。 例如,從products表中獲得第二高價格的產品。

要選擇第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個最高紀錄的例子

第一種方法

例如,如果要在products表中獲得第二個最昂貴的產品(n = 2),則使用以下查詢:

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

執行上面查詢語句,結果如下:

+-------------+--------------------------------+----------+
| productCode | productName                    | buyPrice |
+-------------+--------------------------------+----------+
| S18_2238    | 1998 Chrysler Plymouth Prowler | 101.51   |
+-------------+--------------------------------+----------+
1 row in set

第二種方法

獲得第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);

執行上面查詢語句,結果如下:

+-------------+--------------------------------+----------+
| productCode | productName                    | buyPrice |
+-------------+--------------------------------+----------+
| S18_2238    | 1998 Chrysler Plymouth Prowler | 101.51   |
+-------------+--------------------------------+----------+
1 row in set

在本教學中,我們向您展示了如何使用MySQL中的LIMIT子句在資料庫表中選擇第n條記錄。