*이 도전의 더 세련된 버전은 here 찾을 수 있습니다.SQL 퍼즐 : 행 번호를 생성하는 방법? (잔인한 트위스트와 고전적인 퍼즐)
퍼즐
우리는 테이블 t을 가지고:
목표는, 아래에 규정 된 요구 사항에 따라 , 같은 결과를 반환하는 쿼리 작성하는 것입니다create table t (i int not null);
-
을select t.i,row_number() over (order by t.i) as rn from t;
데이터베이스 같아 테이블 -
create table s (i int not null unique);
모든 나는 테이블 의에 대해 말할 수는 그 정의를 제외하고는 테이블 t, 아니면 등의 같은 수의 행을 가지고 있다는 것입니다.
요구 사항
- 이 솔루션은 단일 SQL 쿼리를해야한다 (하위 쿼리는 괜찮습니다).
- 나타난 기능을 포함 t (아마도 S)를 제외한 모든 테이블의 사용은 는 허용되지 않는다.
- 만 다음과 같은 조항이 허용됩니다 FROM, 을 선택 , WHERE, 그룹 HAVING , BY, (하지만 재귀!)를 및 BY ORDER.
- 분석 함수 의 사용은 허용되지 않습니다..
- ROWNUM의 사용은 는, GUID과 같은 이 허용되지을 rowid로.
- T-SQL, PL/SQL 등 의 사용은 허용되지 않습니다..
- UDF (사용자 정의 함수) 의 사용은 허용되지 않습니다..
- 변수 의 사용은 허용되지 않습니다..
다음은 거의 모든 시간 작동 데이터 샘플
create table t (i int not null);
insert into t (i) values (1);
insert into t (i) values (2);
insert into t (i) values (3);
insert into t (i) values (3);
insert into t (i) values (4);
insert into t (i) values (5);
insert into t (i) values (5);
insert into t (i) values (5);
insert into t (i) values (6);
insert into t (i) values (7);
create table s (i int not null unique);
insert into s (i) values (3);
insert into s (i) values (12);
insert into s (i) values (13);
insert into s (i) values (28);
insert into s (i) values (41);
insert into s (i) values (52);
insert into s (i) values (56);
insert into s (i) values (57);
insert into s (i) values (83);
insert into s (i) values (91);
insert into s (i) values (97);
insert into s (i) values (99);
요청 결과
I RN
---------- ----------
1 1
2 2
3 3
3 4
4 5
5 6
5 7
5 8
6 9
7 10
퍼즐의 전체 SE 사이트가 있습니다. 그러나 이것은 장소가 아닙니다. –
1) 이유가 무엇입니까? 2) "puzzle"에 대한 stackoverflow를 검색하여 29,743 개의 결과를 얻었습니다. –
@sstan - OP에 해결책이 있다고 확신합니다. 그것을 보여주는 것은 퍼즐을 다소 손상시킬 것입니다. –