[SQL] MySQL의보기에서 행 순위
SQLMySQL의보기에서 행 순위
나는 자동으로 결과에 가상 행 번호를 추가하는 뷰를 작성해야합니다. 여기 그래프 내가 달성하고자하는 모든 것을 완전히 무작위 동적으로 생성 할 수있는 마지막 열입니다.
> +--------+------------+-----+
> | 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.사용하다:
사용하다:
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.오라클은 ROWID 의사 열이 있습니다. MySQL은, 당신은 추한 이동해야 할 수도 있습니다 :
오라클은 ROWID 의사 열이 있습니다. MySQL은, 당신은 추한 이동해야 할 수도 있습니다 :
SELECT id, variety, 1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num FROM tbl
이 쿼리는 너무 에누리 그것을 가지고, 내 머리와 검증되지 않은의 상단 꺼져 있습니다. 또한, 당신이 어떤 종류의 조건 (이 경우 ID)보다는 질문에 표시된 임의의 번호에 따라 행 번호를하려는 것으로 가정합니다.
from https://stackoverflow.com/questions/1964811/row-rank-in-a-mysql-view by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 여러 행을 업데이트 할 때 NULL 유형을 주조 (0) | 2020.06.12 |
---|---|
[SQL] SQL 서버 : 포함 된 VARCHAR (MAX) 필드에서 유효하지 않은 XML 문자를 교체 (0) | 2020.06.12 |
[SQL] 오라클 : 기능 인덱스 선택의 고유성 (0) | 2020.06.11 |
[SQL] SQL 그룹으로 각 그룹 상위 N 항목 (0) | 2020.06.11 |
[SQL] 오라클에게 마지막 삽입 IDENTITY 검색 (0) | 2020.06.11 |