> 데이터 베이스 > MySQL 튜토리얼 > MySQL ORDER BY 절에서 행 위치를 효율적으로 검색하는 방법은 무엇입니까?

MySQL ORDER BY 절에서 행 위치를 효율적으로 검색하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2025-01-18 02:15:09
원래의
394명이 탐색했습니다.

How to Efficiently Retrieve a Row's Position in a MySQL ORDER BY Clause?

MySQL ORDER BY 절에서 효율적으로 행 위치 가져오기

데이터베이스 테이블의 데이터를 정렬하면 레코드에 대한 구조화된 보기가 제공됩니다. 그러나 정렬된 결과에서 특정 행의 위치를 ​​확인해야 하는 경우도 있습니다. 이 기사에서는 MySQL에서 ORDER BY 절을 사용하여 이를 달성하는 방법을 살펴보고 단일 행과 해당 위치를 검색하기 위한 최적화된 솔루션을 제공합니다.

문제 설명:

"id"와 "name"이라는 두 개의 열이 포함된 "tbl"이라는 MySQL 테이블을 생각해 보세요. "이름" 열을 기준으로 오름차순으로 정렬하면 테이블 데이터는 다음과 같습니다.

<code>+-----------+--------------------+
| id         | name               |
+-----------+--------------------+
| 5          | Alpha              |
| 7          | Beta               |
| 3          | Delta              |
| ...        | ...                |
| 1          | Zed                |
+-----------+--------------------+</code>
로그인 후 복사

타겟:

목표는 정렬된 테이블에서 "베타" 행과 결과 집합에서의 해당 위치를 검색하는 것입니다. 원하는 출력은 다음과 같아야 합니다.

<code>+-----------+-------------+--------------+
| id         | position    | name        |
+-----------+-------------+--------------+
| 7          |             2 | Beta        |
+-----------+-------------+--------------+</code>
로그인 후 복사

옵션 1: 최적화된 쿼리

ORDER BY 절에서 특정 행의 위치를 ​​검색하려면 하위 쿼리를 사용하여 정렬 순서에 따라 증분적으로 행 번호를 할당할 수 있습니다. 다음 쿼리는 이를 효과적으로 달성합니다.

<code class="language-sql">SELECT x.id, 
       x.position,
       x.name
  FROM (SELECT t.id,
               t.name,
               @rownum := @rownum + 1 AS position
          FROM tbl t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.name) x
 WHERE x.name = 'Beta'</code>
로그인 후 복사

이 쿼리에서는 사용자 정의 변수(@rownum)를 사용하여 증분 행 번호를 할당하는 하위 쿼리(괄호로 묶음)를 만듭니다. @rownum := 0으로 초기화된 가상 테이블로 JOIN을 수행하여 숫자가 1부터 시작하는지 확인합니다. WHERE 절은 결과를 필터링하여 이름이 "Beta"인 행만 검색합니다.

옵션 2: 대체 쿼리

위치를 얻기 위해 다음과 같은 대체 쿼리를 공식화할 수 있습니다.

<code class="language-sql">SELECT t.id,
       (SELECT COUNT(*)
          FROM tbl x
         WHERE x.name < t.name) + 1 AS position,
       t.name
  FROM tbl t
 WHERE t.name = 'Beta';</code>
로그인 후 복사

이 쿼리는 시나리오 1과 달리 대상 이름과 이름이 같거나 적은 행의 수를 계산하여 위치를 계산합니다. 그러나 이 접근 방식을 사용하면 이름이 같은 행이 중복되어 동일한 위치 값이 할당될 수 있다는 점에 유의하는 것이 중요합니다.

위 내용은 MySQL ORDER BY 절에서 행 위치를 효율적으로 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿