2017-04-04 2 views
0

결과 표를 표시하고 싶습니다. 데이터는 Oracle 데이터베이스의 SQL 쿼리에서 제공됩니다. 한 번에 결과를 한 페이지 (예 : 10 개 레코드)로 표시하여 프런트 엔드로 보내는 실제 데이터를 최소화하고 싶습니다.동일한 SQL 쿼리를 사용하여 총 결과 개수 및 주어진 하위 집합 (결과 페이지)을 얻는 방법

동시에 총 가능한 결과 수를 표시하고 (예 : 123의 1-10을 표시) 페이지 매김을 허용하려면 (즉, 페이지 당 10 개, 결과 123 개를 계산해야합니다. 13 쪽).

count 쿼리를 사용하여 총 결과 수를 얻을 수 있습니다.

SELECT count(*) AS NUM_RESULTS FROM ... etc. 

내가 다른 쿼리

SELECT * FROM ... etc. WHERE ? <= ROWNUM AND ROWNUM < ? 

하여 원하는 하위 집합을 얻을 수 있지만, 하나 개의 쿼리에 관련된 모든 세부 사항을 얻을 수있는 방법이 있나요?

업데이트 사실, ROWNUM를 사용하여 위의 쿼리가 0 작동하는 것 같다 -하지만 10, 10-20, 어떻게 내가 너무 할 수 있습니까?

답변

0

테이블에서 내부 조인을 사용하고 하위 쿼리에서 총 결과 수를 가져올 수 있습니다. 다음과 같이 쿼리의 예는 다음과 같습니다

당신이 후 귀하의 질문의 표현을 기반으로하고 있지만,이 두 사이에 행 번호와 함께 모든 레코드의 당신의 전문의 표를 참조 할 것 같다 정확히 무엇인지
SELECT E.emp_name, E.emp_age, E.emp_sal, E.emp_count 
    FROM EMP as E 
INNER JOIN (SELECT emp_name, COUNT(*) As emp_count 
       FROM EMP GROUP BY emp_name) AS T 
    ON E.emp_name = T.emp_name WHERE E.emp_age < 35; 
0

하지 않음 값을 가지며 각 레코드의 인접 필드에 레코드의 총 수를 표시합니다. 그렇다면 테이블에서 모든 항목을 선택하고 COUNT 값의 하위 쿼리를 필드로 결합하여 해당 필드를 레코드에 1 = 1 (즉 모든 사방)에 집어 넣을 수 있습니다. 예 :

SELECT * 
FROM table_name LEFT JOIN (SELECT COUNT(*) AS NUM_RESULTS FROM table_name) ON 1=1 
WHERE ? <= ROWNUM AND ROWNUM < ? 
1

ROWNUM을 사용하는 것은 약간 까다 롭습니다. ROWNUM 가상 열은 실제로 가져 오는 첫 번째 결과로 항상 1부터 시작합니다. ROWNUM> 10으로 필터링하면 아무런 결과도 가져 오지 않으므로 아무런 결과도 가져 오지 않습니다.

당신이 페이징을 사용하려는 경우 (하지 않는 것이 당신이 정말로해야), 그것은 중첩 된 서브 쿼리가 필요합니다 : 당신이 얻을 다른 중첩 된 하위 쿼리를 필요

select * from 
    (select rownum n, x.* from 
    (select * from mytable order by name) x 
    ) 
    where n between 3 and 5; 

주를 order by 권리; 당신이

select * from 
    (select rownum n, x.* from mytable x order by name) 
    where n between 3 and 5; 

보다 한 단계 순서를 넣어 경우는 3 랜덤 (*) 행을 선택하고이를 분류,하지만 당신이 원하는 ususally은 아닙니다.

(*) 실제로 임의적이지는 않지만 예상 한 것과 다를 수 있습니다.

더 효율적인 페이지 매김 구현 방법은 http://use-the-index-luke.com/sql/partial-results/window-functions을 참조하십시오.

+0

ROW_NUM() 함수는 ROWNUM과 어떻게 다른가요? – Vihung

+0

http://stackoverflow.com/questions/174595/in-an-oracle-database-what-is-the-difference-between-rownum-and-row-number –