Oracle Database TIP
질문과 답변에 올라온 오라클 TIP들 32 14 99,999+

by 구루비 SAMPLE() CASE NEXT_DAY COLS USER_TAB_COLS [2003.01.28]


10%를 랜덤하게 가져오기 (SAMPLE 사용)

 
SQL> SELECT *
     FROM table_name
     SAMPLE (10);
    

오라클에서 CASE문 사용 예제

 
SQL> SELECT col,
          CASE
            WHEN col >= 0  AND col < 6  THEN 'A'
            WHEN col >= 6  AND col < 14 THEN 'B'
            WHEN col >= 14 AND col < 22 THEN 'C'
            WHEN col >= 22 THEN 'D'
          END
     FROM table_name;
    

해당년도의 선택된 주의 첫번째 날자를 구하고 싶습니다.

예로 2002년 36번째 주의 첫번째 날자는 2002/09/02입니다. 2002년 36번째주를 가지고 '2002/09/02'이란 해당주의 첫번째 날자를 구하고 싶습니다.

 

SQL> SELECT NEXT_DAY(TO_DATE(해당년도||'0101','RRRRMMDD') + (선택한주 - 2) * 7, 2) 
     FROM DUAL;
 
-- FROM 앞에 2는 월요일을 그 주에 첫번째로 선택한 거니깐 일요일을
-- 그 주의 첫번째 날로 바꾸시려면 1로 바꾸시면 된다.
SQL> SELECT NEXT_DAY(TO_DATE(2003||'0101','RRRRMMDD') + (2 - 2) * 7, 2) 
     FROM DUAL;

NEXT_DAY
--------
03/01/06 
    

DB 테이블 내용 복사 대해서

 
-- Table A와 Table B 가 있는데. A의 내용을 B로 복사하는 방법
SQL> INSERT INTO b SELECT * FROM a;
 
-- Table A가 있고 Table B를 생성하면서 복사하는 방법
SQL> CREATE TABLE b AS SELECT * FROM a;

-- Table A가 있고 Table A와 구조가 같고 
-- 내용은 복사하지 않는 Table B 생성 방법 
SQL> CREATE TABLE b AS SELECT * FROM a WHERE 1 = 2;
    

컬럼에 해당하는 테이블명 알아내기..

 
--  USER_TAB_COLS 데이터사전을 통해 확인할 수 있다.    
SQL> SELECT TABLE_NAME 
     FROM  USER_TAB_COLS
     WHERE COLUMN_NAME ='BOARD_ID'
 
-- COLS라는 시노님을 이용해도 된다.
SQL>SELECT COUNT(COLUMN_NAME) "Column Count"
    FROM COLS
    WHERE TABLE_NAME ='STORM_BOARD'
    

- 강좌 URL : http://www.gurubee.net/lecture/1641

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

by 유니 [2005.10.18 15:01:37]
감사합니다. ^^

by 고마워요 [2006.06.19 14:31:35]
고맙습니다. 볼때마다 항상 도움이 많이 됩니다. 고마워요^^*

by sglim [2006.08.09 10:42:21]
담아갑니다. 고맙습니다.^^

by 사쿠라 [2007.01.07 16:23:11]
SAMPLE (10); 이부분이 실행이 안되는데요 where을 붙여야하나여?

by topsol20 [2007.04.27 11:07:33]
sample(10) 으로 'sample' 과 '(10)' 은 붙여서 사용하니까 되는군요.

by 퍼가용 [2007.07.31 15:46:10]
네이놈 블로그로 퍼갈게요 감사합니다. ^^

by 디스타임 [2007.11.13 15:12:41]
5)번의 경우 아래처럼 해도 계산이 되네요 ^^

SELECT CASE
WHEN POINT>0 AND POINT<=79 THEN '0-79'
WHEN POINT>79 AND POINT<=89 THEN '80-89'
WHEN POINT>89 AND POINT<=100 THEN '90-100'
END,COUNT(*)
FROM TEMP
GROUP BY (CASE
WHEN POINT>0 AND POINT<=79 THEN '0-79'
WHEN POINT>79 AND POINT<=89 THEN '80-89'
WHEN POINT>89 AND POINT<=100 THEN '90-100'
END)
ORDER BY 1 DESC

by 디스타임 [2007.11.13 15:14:43]
참고로 점수를 POINT컬럼으로 사용했습니다.

by 류찬욱 [2008.11.27 13:45:36]
5번 답이 잘못되신듯해서

select
sum(case when 90 <= 점수 then 1 end),
sum(case when 점수 between 80 and 89 then 1 end),
sum(case when 점수 <= 79 then 1 end)
from
테이블명

by 김정식 [2009.07.02 19:04:11]
sample 은 %고, ROW는 dbms_random.Value를 사용해야 합니다.

SELECT *
FROM(
SELECT * FROM c_category
ORDER BY dbms_random.Value)
WHERE ROWNUM < 4

by 오라클의신이되고픈자 [2010.04.15 11:51:41]
아 감사합니다 정말 좋은 자료네요^^

by 김정식 [2010.06.23 14:58:45]
ORDER BY DBMS_RANDOM.RANDOM()

by 오라쟁이 [2011.12.22 15:52:58]
연습해 봐야겠네요.

by 초록짱 [2013.04.10 12:17:32]
유용한 정보 감사하게 잘보고 갑니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입