>데이터 베이스 >MySQL 튜토리얼 >MySQL 행번호() 정렬 기능의 사용법과 주의사항_MySQL

MySQL 행번호() 정렬 기능의 사용법과 주의사항_MySQL

WBOY
WBOY원래의
2016-08-20 08:48:091869검색

많이 사용되지는 않지만, 함수 개발을 위해 mysql에서 문장을 작성해야 하는 상황이 있습니다. SQL Server에서는 정렬을 위해 row_number() 함수를 사용하는 데 익숙하지만 mysql에는 그러한 기능이 없습니다. 그러던 중 포 주인이 쓴 글을 발견했습니다. 변수 할당을 통한 쿼리. (PS 제가 테스트한 버전은 mysql 5.6 입니다.)

먼저 테이블을 생성하세요

CREATE TABLE `test` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Col1` varchar(50) DEFAULT NULL,
`Col2` varchar(50) DEFAULT NULL,
`Col3` int(11) DEFAULT NULL,
`Col4` float DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; 

그런 다음 테스트 데이터를 삽입하고 포 마스터가 소개한 방법을 사용하여 테스트합니다

insert into test(Col1,Col2,Col3,Col4) values (1,2,3,4),(1,2,6,5),(1,2,7,8),(1,"激发",5,7);
delimiter //
select @row:=case when @row is null then 1 else @row+1 end as RNr, 
ID,Col1,Col2,Col3,Col4 from test ;
//
delimiter ; 

쿼리 결과는

단점을 확인할 때 왜 Rnr은 항상 1인가요? 이 쿼리의 경우 @row 변수의 값은 항상 null이었으므로 사례 판별식에 따라 1만 될 수 있습니다. 이런 현상을 일으켰습니다. 하지만 다시 실행하면 같은 스크립트를 사용하게 되겠지만

다시 실행하면 2345가 나와야 합니다

테스트를 통해 이것이 사실임을 확인했기 때문에 볼 수 있습니다. 해당 변수는 이 세션에 항상 존재하고 매번 사용되므로 이전 상황이 발생합니다.

실제로 해당 솔루션도 매우 간단합니다. 각 세션이 동일한 값을 사용하므로 문제를 해결하려면 처음에만 초기 값을 할당하면 됩니다. Starting row = 0; 이 문장을 추가하면 실행될 때마다 초기값이 먼저 할당되어 일관된 실행 결과를 얻을 수 있습니다.

이 테스트를 통해 이 데이터베이스에서는 제어 변수 hin의 초기 값이 중요하다는 것을 알 수 있습니다.

이상은 에디터가 소개한 Mysql row_number() 정렬 기능의 사용법과 주의사항입니다. 문의사항이 있으시면 메시지를 남겨주시면 에디터가 답변해 드리겠습니다. 시간에. 홈페이지에 대한 귀하의 지원에 진심으로 감사드립니다!

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