2017-12-27 28 views
3
SELECT ROW_NUMBER()OVER(ORDER BY id), x, y, id 
FROM coordonnees 
ORDER BY id 

나는 각 행의 행 번호 (3 열이 coordonnees라는 테이블 : id, x, y)을 반환하기 위해 노력하고있어,하지만이 코드는구문 Eror 행 번호 데이터베이스

작동하지 않습니다 오류 :

구문 오류 근처 '(ID BY ORDER), X, Y, ID 데이터베이스에

: MYS QL 5.7.9

+1

사용중인 데이터베이스에 질문을 태그하십시오. 모든 데이터베이스가'row_number()'를 지원하는 것은 아닙니다. –

+0

구문은 정확합니다 (http://rextester.com/HJVI30138). 어쩌면 사용중인 DBMS가 현대 SQL을 지원하지 않을 수도 있습니다. –

+0

@a_horse_with_no_name 감사 드리겠습니다. –

답변

1

분명히 MySQL 5.7은 ROW_NUMBER()을 지원하지 않습니다. 그러나 this site에서 에뮬레이트 할 새로운 솔루션을 발견했습니다.

SELECT @row_num := IF(@prev_value=c.id,@row_num+1,1) AS RowNumber 
     ,c.x 
     ,c.y 
     ,c.id 
     ,@prev_value := c.id 
FROM coordonnees c, 
    (SELECT @row_num := 1) x, 
    (SELECT @prev_value := -1) y 
ORDER BY c.id 

하지만, 몇 가지주의 사항이 있습니다

  • @row_num 변수는 @prev_value 변수 전에 설정해야합니다.
  • ORDER BY의 첫 번째 필드는 파티셔닝 할 필드 여야합니다.
  • @prev_value 변수에 할당 된 기본값은 파티션별로 존재하지 않아야합니다.