mysql中最棘手的問題之一是:如何獲得結果集中的第n個最高值,例如查詢第二(或第n)貴的產品是哪個,顯然不能使用MAX或MIN這樣的函數來查詢獲得。 但是,我們可以使用MySQL LIMIT來解決這樣的問題。
-
首先,按照降序對結果集進行排序。
-
第二步,使用LIMIT子句獲得第n貴的產品。
通用查詢如下:
SELECT? ????column1,?column2,... FROM ????table ORDER?BY?column1?DESC LIMIT?nth-1,?count;
?下面我們來看看一個例子,products表的結構如下所示 –
mysql>?desc?products; +--------------------+---------------+------+-----+---------+-------+ |?Field??????????????|?Type??????????|?Null?|?Key?|?Default?|?Extra?| +--------------------+---------------+------+-----+---------+-------+ |?productCode????????|?varchar(15)???|?NO???|?PRI?|?NULL????|???????| |?productName????????|?varchar(70)???|?NO???|?????|?NULL????|???????| |?productLine????????|?varchar(50)???|?NO???|?MUL?|?NULL????|???????| |?productScale???????|?varchar(10)???|?NO???|?????|?NULL????|???????| |?productVendor??????|?varchar(50)???|?NO???|?????|?NULL????|???????| |?productDescription?|?text??????????|?NO???|?????|?NULL????|???????| |?quantityInStock????|?smallint(6)???|?NO???|?????|?NULL????|???????| |?buyPrice???????????|?decimal(10,2)?|?NO???|?????|?NULL????|???????| |?MSRP???????????????|?decimal(10,2)?|?NO???|?????|?NULL????|???????| +--------------------+---------------+------+-----+---------+-------+ 9?rows?in?set
?查看以下產品表中的行記錄:
mysql>?SELECT?productCode,?productName,?buyprice FROM?products ORDER?BY ?buyprice?DESC; +-------------+--------------------------------------+----------+ |?productCode?|?productName??????????????????????????|?buyprice?| +-------------+--------------------------------------+----------+ |?S10_4962????|?1962?LanciaA?Delta?16V???????????????|?103.42???| |?S18_2238????|?1998?Chrysler?Plymouth?Prowler???????|?101.51???| |?S10_1949????|?1952?Alpine?Renault?1300?????????????|?98.58????| |?S24_3856????|?1956?Porsche?356A?Coupe??????????????|?98.3?????| |?S12_1108????|?2001?Ferrari?Enzo????????????????????|?95.59????| |?S12_1099????|?1968?Ford?Mustang????????????????????|?95.34????| ...?.... +-------------+--------------------------------------+----------+ 110?rows?in?set
?我們的任務找出結果集中價格第二高的產品。可以使用LIMIT子句來選擇第二行,如以下查詢(注意:偏移量從0開始,所以要指定從1開始,然后取一行記錄):
SELECT?productCode,?productName,?buyprice?FROM??products ORDER?BY?buyprice?DESC LIMIT?1,?1;
?執行上面查詢語句,得到以下結果 –
mysql>?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
?類似的,獲取售價第三高、第四高的產品信息為:LIMIT 2, 1 和 LIMIT 3, 1。
相關文章:
相關視頻:
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END