일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- oracle install
- 오라클
- php5
- dba
- Oracle RAC
- Linux
- solaris network
- MySQL
- fdisk
- PERL
- solaris
- command & perl
- SQL
- grid
- perl + 정규표현식
- prompt
- rac
- RHEL4
- Network
- oracle
- patch
- bash
- sqlplus
- 연산자
- perl one-liner
- mariaDB
- memory
- Unix
- perl string
- cygwin
Archives
- Today
- Total
DATA 전문가로 가는 길
[SQL] MariaDB/MySQL MAX/MIN 최고값 최저값의 세부 속성 데이터 활용하기(최고일시, 최저일시 등) 본문
Data Architecture/SQL Query
[SQL] MariaDB/MySQL MAX/MIN 최고값 최저값의 세부 속성 데이터 활용하기(최고일시, 최저일시 등)
EstenPark 2017. 3. 24. 14:00GROUP BY에서 MAX/MIN 함수를 응용한 세부 속성 데이터를 가져갈 수 있도록 하는 방안이며, 만약 최고값의 날짜를 구하려면 정렬된 순서에 의한 데이터를 하나씩 증가해서 큰 값을 올리는 사용자 변수를 응용할 수밖에 없습니다. 그러나 제일 큰 문제는 전체 집합을 구할 때 대용량 데이터라면 속도 문제를 발생 시킬 수 있습니다.
집계 데이터를 뽑을 때 한 번에 작업 후 문자열을 잘라서 사용할 수 있다고 하면, 성능적인 이슈를 해결할 수 있습니다.
1. 샘플 데이터 (시스템 서버의 디스크 사용 이력)
- SYS_SVR_NO : SERVER 번호
- DIR_NM : 시스템 디렉토리(파티션 별) 명
- GART_DT : 수집일자
- FILE_SYS_NM : 시스템 파티션 명
- ALL_CAP : 전체 용량
- USE_CAP : 현재 사용한 용량
- USE_ABLE_CAP : 현재 사용 가능한 용량
- ALL_USE_RT : 전체 사용률(%)
2. 쿼리 작성
- 시스템 서버 + 디렉토리명을 기준으로 최고 사용률, 최고 사용률의 일시(시간), 최저 사용율, 최저 사용율의 일시(시간)
- 그룹 집합에서 최고, 최저에 대한 세부 항목을 가져 옵니다.
SELECT A.SYS_SVR_NO ,A.DIR_NM ,ROUND(A.AVG_USE_RT, 2) AS AVG_USE_RT ,CAST(TRIM(SUBSTRING_INDEX(A.MAX_ALL_DATA, '|', 1)) AS DECIMAL(6, 2)) AS MAX_USE_RT ,STR_TO_DATE(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(A.MAX_ALL_DATA, '|', 2), '|', -1)), '%Y%m%d%H%i%s') AS MAX_GART_DT ,CAST(TRIM(SUBSTRING_INDEX(A.MIN_ALL_DATA, '|', 1)) AS DECIMAL(6, 2)) AS MIN_USE_RT ,STR_TO_DATE(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(A.MIN_ALL_DATA, '|', 2), '|', -1)), '%Y%m%d%H%i%s') AS MIN_GART_DT FROM (SELECT A.SYS_SVR_NO ,A.DIR_NM ,AVG(A.ALL_USE_RT) AS AVG_USE_RT ,MAX(CONCAT(LPAD(ROUND(A.ALL_USE_RT, 2), 6, '0'), '|', DATE_FORMAT(A.GATR_DT, '%Y%m%d%H%i%s'))) AS MAX_ALL_DATA ,MIN(CONCAT(LPAD(ROUND(A.ALL_USE_RT, 2), 6, '0'), '|', DATE_FORMAT(A.GATR_DT, '%Y%m%d%H%i%s'))) AS MIN_ALL_DATA FROM EST_SYS_RESC_DISK A WHERE 1 = 1 AND A.GATR_DT BETWEEN '20160322' AND '20160630' GROUP BY A.SYS_SVR_NO, A.DIR_NM) A ;
3. 최종 결과
'Data Architecture > SQL Query' 카테고리의 다른 글
[SQL] MariaDB/MySQL 테이블 일련번호 중간에 빈 값 찾기 (0) | 2019.07.24 |
---|---|
[SQL] Oracle Merge 문법 자동 생성기(PL/SQL) (0) | 2017.09.25 |
[SQL] Oracle 필수 스크립트 모음(딕셔너리, SQL 문법, 성능 분석) (0) | 2017.03.13 |
[SQL] MariaDB/Mysql 구분자(콤마, 파이프라인 등등)를 기준으로 열(row) 변환 (2) | 2017.02.16 |
[SQL] Oracle Merge(Insert, Update, Delete) 한번에 작업 하는 방법 (1) | 2016.12.22 |
Comments