>

이와 같은 Sqlite 데이터베이스 테이블이 있습니다 (오름차순)

그러나이름으로 오름차순으로 표를 검색해야합니다. 오름차순으로 설정하면 rowId가 뒤죽박죽 순서로 다음과 같이 바뀝니다

그러나 매번 오름차순으로 일부제한된 연락처 수 5를 검색해야합니다

Aaa-EeeeFfff- Jjjjj와 같은 ......

그러나 0-5 5-10과 같은 한계를 설정하려면 .... ** 행 ID가 뒤죽박죽 순서이기 때문에 사용할 수 있습니다

따라서(rowNum in oracle)과 같은 다른 열이 필요합니다. 1234567 ... 다음과 같이 매번

기존 열을 사용하여 해당 열을 검색하는 방법

Note: WE DONTE HAVE ROWNUM LIKE COLUMN IN SQLITE


  • 답변 # 1

    이것은 RowNum을 위조하는 방법입니다. 도움이 되길 바랍니다 :

    SELECT 
       (SELECT COUNT(*)
        FROM Names AS t2
        WHERE t2.name < t1.name
       ) + (
          SELECT COUNT(*) 
          FROM Names AS t3 
          WHERE t3.name = t1.name AND t3.id < t1.id
       ) AS rowNum,
       id,
       name
    FROM Names t1
    ORDER BY t1.name ASC
    
    

    SQL Fiddle 예제

  • 답변 # 2

    가짜 rownum 솔루션은 영리하지만 확장이 잘되지 않을까 걱정됩니다 (복잡한 쿼리의 경우 각 행에서 현재 행의 수를 결합하고 계산해야 함) 행).

    create table tmp as select /*your query*/ 사용을 고려하겠습니다 . select as create 조작의 경우 삽입시 rowid가 작성되었으므로 행은 정확히 행 번호 (카운터)가됩니다. SQLite 문서에 의해 지정됩니다.

    초기 쿼리가 삽입되면 tmp 테이블 만 쿼리하면됩니다 :

    select rowid, /* your columns */ from tmp
    order by rowid
    
    

  • 답변 # 3

    오프셋/한계를 사용할 수 있습니다.

    5 행의 첫 번째, 두 번째 및 세 번째 그룹을 가져옵니다.

    select rowid, name from contactinfo order by name limit 0, 5
    select rowid, name from contactinfo order by name limit 5, 5
    select rowid, name from contactinfo order by name limit 10, 5
    
    
    경고, 위의 구문을 사용하려면 SQLite가 모든 이전 레코드를 정렬 된 순서대로 읽어야합니다. 따라서 SQLite 위의 명령문 번호 3에 대한 10 번째 레코드를 얻으려면 처음 9 개의 레코드를 읽어야합니다. 레코드 수가 많으면 성능 관점에서 문제가 될 수 있습니다.

    한계/오프셋에 대한 추가 정보 :

    Sqlite 쿼리 최적화 (제한 및 오프셋 사용)

    Sqlite LIMIT/OFFSET 쿼리

  • 이전 java - jtable에서 필드의 형식 지정 문제 - 정수와 더블의 차이점
  • 다음 일부 값에 백분율 기호 (%)가 포함 된 R에서 CSV 파일을 읽는 방법