본문 바로가기
MySql

MySQL은 ORDER BY에서 행 위치를 얻습니다.

by 베이스 공부 2020. 11. 9.
반응형

다음 MySQL 테이블을 사용합니다.

+-----------------------------+
+ id INT UNSIGNED             +
+ name VARCHAR(100)           +
+-----------------------------+

name ASC 로 정렬 할 때 단일 행과 테이블의 다른 행 사이에서 해당 위치를 선택하려면 어떻게해야합니까? 따라서 테이블 데이터가 다음과 같으면 이름별로 정렬 할 때 :

+-----------------------------+
+ id | name                   +
+-----------------------------+
+  5 | Alpha                  +
+  7 | Beta                   +
+  3 | Delta                  +
+ .....                       +
+  1 | Zed                    +
+-----------------------------+

해당 행의 현재 위치를 가져 오는 베타 행을 어떻게 선택할 수 있습니까? 내가 찾고있는 결과 세트는 다음과 같습니다.

+-----------------------------+
+ id | position | name        +
+-----------------------------+
+  7 |        2 | Beta        +
+-----------------------------+

간단한 SELECT * FROM tbl ORDER BY name ASC 를 수행 한 다음 PHP에서 행을 열거 할 수 있지만 단일 행에 대해 잠재적으로 큰 결과 집합을로드하는 것은 낭비적인 것 같습니다.

 

해결 방법

 

이것을 사용하십시오 :

SELECT x.id, 
       x.position,
       x.name
  FROM (SELECT t.id,
               t.name,
               @rownum := @rownum + 1 AS position
          FROM TABLE t
          JOIN (SELECT @rownum := 0) r
      ORDER BY t.name) x
 WHERE x.name = 'Beta'

... 고유 한 위치 값을 얻습니다. 이:

SELECT t.id,
       (SELECT COUNT(*)
          FROM TABLE x
         WHERE x.name <= t.name) AS position,
       t.name    
  FROM TABLE t      
 WHERE t.name = 'Beta'

... 동점에 동일한 가치를 부여합니다. IE : 두 번째 위치에 두 개의 값이 있으면 첫 번째 쿼리가 둘 중 하나에 2의 위치를, 다른 하나에 3의 위치를 ​​제공 할 때 둘 다 위치가 2가됩니다.

 

참조 페이지 https://stackoverflow.com/questions/3614666

 

 

반응형

댓글