>  기사  >  데이터 베이스  >  MySQL 결과 세트에서 n번째로 높은 값을 얻는 방법은 무엇입니까? MySQL LIMIT를 사용한 솔루션 사례

MySQL 결과 세트에서 n번째로 높은 값을 얻는 방법은 무엇입니까? MySQL LIMIT를 사용한 솔루션 사례

php是最好的语言
php是最好的语言원래의
2018-08-03 15:04:081218검색

MySQL에서 가장 까다로운 문제 중 하나는 결과 집합에서 n번째로 높은 값을 얻는 방법입니다. 예를 들어 두 번째(또는 n) 가장 높은 값을 쿼리하는 것입니다. MAX 또는 MIN과 같은 함수를 사용하여 쿼리하여 얻을 수 없는 값비싼 제품입니다. 그러나 MySQL LIMIT을 사용하여 이러한 문제를 해결할 수 있습니다.
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, 1LIMIT 3, 1

일반적인 쿼리는 다음과 같습니다.

rrreee 예를 살펴보겠습니다. products 테이블의 구조는 다음과 같습니다. - rrreee

보기 다음 제품 테이블의 행 기록:

rrreee

우리의 임무는 결과 집합에서 두 번째로 높은 가격의 제품을 찾는 것입니다. 다음 쿼리와 같이 LIMIT 절을 사용하여 두 번째 행을 선택할 수 있습니다(참고: 오프셋은 0에서 시작하므로 1에서 지정). > 시작하고 한 행의 레코드를 가져옵니다):

rrreee 위 쿼리문을 실행하면 다음과 같은 결과를 얻습니다. - rrreee

마찬가지로 판매 가격이 세 번째와 네 번째로 높은 제품 정보를 가져옵니다: LIMIT 2, 1 code> 및 <code>LIMIT 3, 1. 🎜🎜관련 기사: 🎜🎜🎜Mysql의 각 그룹에서 N번째 레코드를 가져오는 방법🎜🎜🎜🎜mssql mysql 제한 sql 문 구현🎜🎜🎜관련 동영상: 🎜🎜🎜limit Usage-Boolean Education Yan Shiba mysql 소개 동영상 튜토리얼🎜 🎜

위 내용은 MySQL 결과 세트에서 n번째로 높은 값을 얻는 방법은 무엇입니까? MySQL LIMIT를 사용한 솔루션 사례의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.