如何获得MySQL结果集中的第n个最高值?使用MySQL LIMIT的解决案例


本文摘自PHP中文网,作者php是最好的语言,侵删。

MySQL中最棘手的问题之一是:如何获得结果集中的第n个最高值,例如查询第二(或第n)贵的产品是哪个,显然不能使用MAX或MIN这样的函数来查询获得。 但是,我们可以使用MySQL LIMIT来解决这样的问题。

  • 首先,按照降序对结果集进行排序。

  • 第二步,使用LIMIT子句获得第n贵的产品。

通用查询如下:

1

2

3

4

5

6

SELECT

    column1, column2,...

FROM

    table

ORDER BY column1 DESC

LIMIT nth-1, count;

下面我们来看看一个例子,products表的结构如下所示 -

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

查看以下产品表中的行记录:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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开始,然后取一行记录):

1

2

3

SELECT productCode, productName, buyprice FROM  products

ORDER BY buyprice DESC

LIMIT 1, 1;

执行上面查询语句,得到以下结果 -

1

2

3

4

5

6

7

8

9

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, 1LIMIT 3, 1

相关文章:

如何得到Mysql每个分组中的第N条记录

mssql 实现mysql limit sql语句

相关视频:

limit用法-布尔教育燕十八mysql入门视频教程

以上就是如何获得MySQL结果集中的第n个最高值?使用MySQL LIMIT的解决案例的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql实现sql统计的实例

mysql查看数据库命令是什么?

sqlite如何迁移到mysql脚本的实例介绍

mysql搜索引擎及其区别

mysql 5.0触发器参考教程第44页

细说mysql死锁与日志二三事

mysql中的日期字段有哪些

怎么查看电脑是否有mysql

mysql当前时间增加5分钟的实现方法

mysql存储引擎myisam和innodb之间的比较

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...