source

오라클의 테이블에서 짝수 레코드를 선택하는 방법?

factcode 2023. 10. 16. 22:06
반응형

오라클의 테이블에서 짝수 레코드를 선택하는 방법?

저는 아래 쿼리를 사용하여 짝수 개의 레코드를 검색하고 있습니다.하지만 그 결과 행이 표시되지 않습니다.

select ename,job from emp where mod(rownum,2)=0;

mod(rownum,2)가 where 조건에서 작동하지 않는 이유

홀수 레코드를 선택할 수 있는 쿼리도 주실 수 있나요?

그 질문에 무슨 문제라도 있습니까?

제안 좀 해주세요..

첫번째 행의 경우 다음과 같이 작동하지 않습니다.ROWNUM1그리고 이 경우엔MOD(ROWNUM,2)1그리고 너의 이후로WHERE전표는MOD(ROWNUM,2)=0그러면 이는 다음과 같이 줄어듭니다.1=0행은 폐기됩니다.다음 행은 다음 행에 대해 테스트됩니다.ROWNUM1(이전 행이 더 이상 출력에 없고 행 번호가 없기 때문에). 이 값은 다시 테스트에 실패하고 폐기됩니다.반복, 구역질 및 모든 행이 실패합니다.WHERE테스트 후 폐기됩니다.

이런 식으로 홀수 행을 구하려고 할 경우WHERE MOD(ROWNUM,2)=1그러면 첫 번째 행만 반환되고 두 번째 행은 테스트에 실패하고 쿼리에 포함되지 않습니다.

Vijaykumar Hadalgi가 제안하는 것처럼 하위 쿼리에서 ROWNUM을 선택하고(여기서 ROWNUM은 제한하는 where 절 없이 모든 행에 번호를 부여할 수 있음) 외부 쿼리에서 테스트를 수행하여 행을 제한해야 합니다.

SELECT ename, job
FROM   (
  SELECT ename,
         job,
         ROWNUM AS row_id             -- Generate ROWNUM second.
  FROM   (
    SELECT ename, job
    FROM   Emp
    ORDER BY ename                    -- ORDER BY first.
  )
)
WHERE  MOD( row_id, 2 ) = 0;          -- Filter third.

SQLFIDLE

이거 먹어봐요.

세부 정보의 짝수를 찾으려면 이 코드를 사용할 수 있습니다.이것은 MySQL 뿐만 아니라 오라클 SQL에서도 편안합니다.

select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) = 0;

행 세부 정보의 ODD 번호를 찾으려면 이 코드를 사용할 수 있습니다.

select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) <> 0;
-- for selecting rows 1,3,5,7....
SELECT EMPLOYEE_ID,FIRST_NAME, LAST_NAME FROM 
(
  SELECT DENSE_RANK OVER(ORDER BY EMPLOYEE_ID)AS RANK, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
  FROM EMPLOYEES
)
WHERE MOD(RANK,2)=1

-- for selecting rows 2,4,6,8....
SELECT EMPLOYEE_ID,FIRST_NAME, LAST_NAME FROM 
(
  SELECT DENSE_RANK OVER(ORDER BY EMPLOYEE_ID)AS RANK, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
  FROM EMPLOYEES
)
WHERE MOD(RANK,2)=0
select * from emp where empid in (select decode(mod(rownum,2),0, empid,null) from emp);  --Alternate record Even numbered

테이블에서 짝수 레코드 가져오기

또는 다음을 시도해 볼 수 있습니다.

여기서 내부 쿼리는 모든 짝수 레코드 기본 키 값을 가져오고 이를 기반으로 모든 레코드 세부 정보를 얻을 수 있습니다.

SELECT * FROM EMP WHERE EMPNO IN
( 
SELECT CASE MOD(ROWNUM,2)
        WHEN 0 THEN EMPNO
        END
FROM EMP
);

이상한 기록들을 모두 가져올 겁니다

SELECT * FROM EMP WHERE EMPNO IN
(
SELECT  CASE MOD(ROWNUM,2)
        WHEN 1 THEN EMPNO
        END
FROM EMP
);

이것은 다음과 같습니다.

Select * from (Select rownum as No_of_Row, E.* from emp E)
Where mod(No_of_Row,2)=0;

아래 쿼리를 사용하면 결과를 얻을 수 있습니다.

SELECT empno,ename,slno  
FROM  ( SELECT empno,ename,ROW_NUMBER() OVER
(ORDER BY empno desc) AS slno FROM emp ) result WHERE mod(slno,2) = 1;

아래 쿼리를 사용합니다.

select * from (select ename,job, ROWNUM as row_id from emp) where mod(row_id, 2) = 0;
Select ename, job from emp where mod(id, 2) =0 ;

시도해 볼 수 있습니다.id대신 칼럼rownum테이블에 ID 열이 있는 경우

조항과 함께 사용할 수 있습니다.

예:

WITH Tab AS (mod (rownum,2) AS R,EMPOYES.* from Tab WHERE R = 0;

홀수 행을 원할 경우 R = 1.

예:

WITH Tab AS (mod (rownum,2) AS R,EMPOYES.* from Tab WHERE R = 1;

행 번호는 원래 테이블이 아닌 결과 테이블의 행 번호를 나타냅니다.따라서 먼저 row_id 또는 임의의 변수에 할당하고 해당 변수를 사용합니다.

시도해 보십시오:

select * from emp where (rowid,0) in (select rowid, mod(rownum,2) from emp)

출력:- 2 4 6

Select * from emp where (rowid,1) in (select rowid, mod(rownum,2) from emp);

출력: 1,3,5..

안 그러면 될 겁니다.

다음 내용:

홀수:

select * from
( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
 ) d 
where (RowNumber % 2) = 1 

짝수 :

select * from
( 
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber', 
FROM table1
) d 
where (RowNumber % 2) = 0

언급URL : https://stackoverflow.com/questions/20014495/how-to-select-even-records-from-a-table-in-oracle

반응형