복붙노트

[SQL] MySQL의보기에서 행 순위

SQL

MySQL의보기에서 행 순위

나는 자동으로 결과에 가상 행 번호를 추가하는 뷰를 작성해야합니다. 여기 그래프 내가 달성하고자하는 모든 것을 완전히 무작위 동적으로 생성 할 수있는 마지막 열입니다.

> +--------+------------+-----+
> | id     | variety    | num |
> +--------+------------+-----+
> | 234    | fuji       |   1 |
> | 4356   | gala       |   2 |
> | 343245 | limbertwig |   3 |
> | 224    | bing       |   4 |
> | 4545   | chelan     |   5 |
> | 3455   | navel      |   6 |
> | 4534345| valencia   |   7 |
> | 3451   | bartlett   |   8 |
> | 3452   | bradford   |   9 |
> +--------+------------+-----+

질문:

SELECT id, 
       variety, 
       SOMEFUNCTIONTHATWOULDGENERATETHIS() AS num 
  FROM mytable

해결법

  1. ==============================

    1.사용하다:

    사용하다:

    SELECT t.id,
           t.variety,
           (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
      FROM TABLE t
    

    의 num 값에 대한 쿼리가 반환 모든 행에 대해 실행합니다 때문에,이 일의 이상적인 방식이 아니다. 더 좋은 아이디어는 않을까 다수로 증가하고 가입 및 다음 가변 예와 유사한 방식으로 NUMBERS 테이블을 참조하는지에 따라 1부터 번호를 포함하는 단일 컬럼하는 NUMBERS 테이블을 작성하는 것이다.

    MySQL은 어떤 순위 기능이 없기 때문에 당신은 의사의 행 번호 기능을 얻기 위해 변수를 정의 할 수 있습니다 :

    SELECT t.id,
           t.variety,
           @rownum := @rownum + 1 AS num
      FROM TABLE t,
           (SELECT @rownum := 0) r
    

    당신이 할 경우 인해 디자인 뷰에서 변수를 사용할 수 없기 때문에, 당신은 1351 오류가 발생합니다. 버그 / 기능이 동작은 여기에 설명되어 있습니다.

  2. ==============================

    2.오라클은 ROWID 의사 열이 있습니다. MySQL은, 당신은 추한 이동해야 할 수도 있습니다 :

    오라클은 ROWID 의사 열이 있습니다. MySQL은, 당신은 추한 이동해야 할 수도 있습니다 :

    SELECT id,
           variety,
           1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
      FROM tbl
    

    이 쿼리는 너무 에누리 그것을 가지고, 내 머리와 검증되지 않은의 상단 꺼져 있습니다. 또한, 당신이 어떤 종류의 조건 (이 경우 ID)보다는 질문에 표시된 임의의 번호에 따라 행 번호를하려는 것으로 가정합니다.

  3. from https://stackoverflow.com/questions/1964811/row-rank-in-a-mysql-view by cc-by-sa and MIT license