oracle

> ABS(n) : 주어진 값의 절대값 리턴 SELECT ABS(-10), ABS(10), ABS(0) FROM DUAL; CELL(n) : 주어진 값보다는 크지만 가장 근접하는 최소값 리턴 SELECT CEIL(5.5) FROM DUAL; EXP(n) : 주어진 값의 e의 승수를 리턴 (e = 2.171828183...) SELECT EXP(5) FROM DUAL; FLOOP(n) : 주어진 값보다 작거나 같은 최대 정수값을 리턴 SELECT FLOOR(5.5) FROM DUAL; LN(n) : 주어진 값의 자연로그 값을 리턴 SELECT LN(148.413) FROM DUAL; LOG(m, n) : 밑을 m으로 한 n의 로그 값을 리턴 SELECT LOG(10, 1000) FROM DUAL; MOD(..
GROUPING() 함수는 SELECT 절에서 사용하는 함수이다. GROUPING() 함수의 인자로 그룹핑 대상인 컬럼을 지정하면 해당 컬럼이 NULL일 때 1, NOT NULL일 때 2를 반환하는 함수이다. SELECT B.DNAME , A.JOB , SUM(A.SAL) , GROUPING(B.DNAME) AS GP1 , GROUPING(A.JOB) AS GP2 FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY ROLLUP(B.DNAME, A.JOB) ORDER BY 1,2 ; 이를 CASE-WHEN 절과 함께 활용하면 NULL 값을 소계, 총계 등으로 지정할 수 있다. SELECT CASE WHEN T.GP1 = 1 THEN '총계' ELSE T.DNA..
CUBE() 함수는 인자로 받는 컬럼으로 만들 수 있는 모든 조합으로 집계하여 추출하는 함수이다. 위와 같은 결과를 얻으려면, 다음과 같이 작성할 수 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY CUBE(B.DNAME) ORDER BY 1 ; 얼핏보면 ROLLUP() 함수와 다를 거 없는 함수처럼 보이지만, CUBE() 함수는 받는 인자가 많아질수록 조합이 다양해져 출력하는 결과가 훨씬 많아진다. SELECT B.DNAME , A.JOB , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY CUBE(B.DNAME, A.JOB) ..
GROUPING SETS() 함수는 이전 포스팅에서 다뤘던 ROLLUP()과 마찬가지로 GROUP BY 절에서 사용하는 함수이며, 인자로 받는 컬럼 별 집계함수 값을 리턴하는 함수이다. 위와 같은 결과를 얻고 싶을 때, GROUPING SETS 함수를 활용하면 다음과 같이 짤 수 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY GROUPING SETS(B.DNAME) ORDER BY 1 ; 근데 뭔가 이상하지 않은가? 위와 같은 결과를 더 쉽게 추출하는 방법을 우리는 알고 있다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B...
일상적인 업무에서 쿼리를 짜다 보면, 합계를 구하고 싶을 때가 정말 많다. 예시로 DEPT 테이블의 부서명 컬럼을 기준으로 해당 부서에 속한 사원들의 총 급여를 구하려면 쿼리를 어떻게 짜야할까? 확장 GROUP 함수를 모른다면, 다음과 같이 작성했을 것이다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEPT B WHERE A.DEPTNO = B.DEPTNO GROUP BY B.DNAME UNION ALL SELECT NULL , SUM(A.SAL) FROM EMP A ORDER BY 1 ; 위 방식이 틀렸다는 것은 아니다. 하지만 확장 GROUP 함수를 쓴다면 다음처럼 간략하게 표현 가능하다. SELECT B.DNAME , SUM(A.SAL) FROM EMP A , DEP..
좌측 그리드의 row를 클릭하면 오른쪽 그리드가 조회되는 화면을 만들었는데, 좌측 그리드의 값에 따라 조회하는 테이블이 각각 달라서 우측 그리드의 컬럼을 정적인 값으로 고정하기 힘들었다. 할 순 있었지만 애매한 단어 선택으로 사용자에게 혼란을 야기할 것이 분명했고, 이는 곧 수정 요청 사항으로 접수되기 마련이다(경험이다). 그래서 우측 그리드가 조회될 때마다 컬럼을 동적으로 세팅되도록 설계했다. 이 때 동적으로 세팅되는 컬럼 값을 조회해오는 컬럼 값 그대로 뿌려주니 전부 영어로 출력되어, 데이터를 알아보기 어려워서 각각의 테이블 컬럼 코드와 매핑된 컬럼 값을 가져와서 뿌려주기로 했다. SELECT * FROM ALL_COL_COMMENTS WHERE TABLE_NAME = '테이블명' OR SELECT ..
xoghks_h
'oracle' 태그의 글 목록