在本教學中,您將學習如何使用各種技術選擇資料庫表中第n
個最高記錄。
使用MAX或MIN函式可以輕鬆選擇資料庫表中最高或最低的記錄。但是,選擇第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
個最高記錄。
第一種方法
例如,如果要在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
條記錄。