오라클의 테이블에서 짝수 레코드를 선택하는 방법?
저는 아래 쿼리를 사용하여 짝수 개의 레코드를 검색하고 있습니다.하지만 그 결과 행이 표시되지 않습니다.
select ename,job from emp where mod(rownum,2)=0;
mod(rownum,2)가 where 조건에서 작동하지 않는 이유
홀수 레코드를 선택할 수 있는 쿼리도 주실 수 있나요?
그 질문에 무슨 문제라도 있습니까?
제안 좀 해주세요..
첫번째 행의 경우 다음과 같이 작동하지 않습니다.ROWNUM
가1
그리고 이 경우엔MOD(ROWNUM,2)
가1
그리고 너의 이후로WHERE
전표는MOD(ROWNUM,2)=0
그러면 이는 다음과 같이 줄어듭니다.1=0
행은 폐기됩니다.다음 행은 다음 행에 대해 테스트됩니다.ROWNUM
1(이전 행이 더 이상 출력에 없고 행 번호가 없기 때문에). 이 값은 다시 테스트에 실패하고 폐기됩니다.반복, 구역질 및 모든 행이 실패합니다.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.
이거 먹어봐요.
행 세부 정보의 짝수를 찾으려면 이 코드를 사용할 수 있습니다.이것은 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
'source' 카테고리의 다른 글
여러 숫자의 기하평균을 계산하는 효율적인 방법 (0) | 2023.10.16 |
---|---|
Xcode 5 and iOS 7 : 아키텍처와 유효한 아키텍처 (0) | 2023.10.16 |
Excel 공식 - 열에서 텍스트 값의 빈도 수 계산 (0) | 2023.10.16 |
더하다더하다WooCommerce 페이지 템플릿으로WooCommerce 페이지 템플릿으로 (0) | 2023.10.16 |
graphql을 사용하여 스프링 부트에서 인증 (0) | 2023.10.16 |