Spark window 함수 예제 (공부용)
·
Study/SQL
1) 사용자별 최신 이벤트 1건만 남기기목표: user_id마다 가장 최근 event_time 1행만 남긴다.WITH t AS ( SELECT user_id, -- 사용자 식별자 event_time, -- 이벤트 발생 시간 payload, -- 부가 데이터(원하는 컬럼) ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_time DESC) AS rn -- PARTITION BY user_id: 사용자별로 그룹을 나눔 -- ORDER BY event_time DESC: 각 사용자 그룹 안에서 최신 시간이 먼저 오게 정렬 -- ROW_NUMBER(): 정렬된 순서대로 1,2..
[ORACLE] ORA-01861: literal does not match format string 오라클 에러 해결 방법
·
Study/SQL
ORA-01861: literal does not match format string 에러 발생 원인과 해결 방법DATE 타입인 컬럼과 String 문자열을 비교해서 발생한 오류이다. 문자열을 DATE 타입으로 바꾸어 해결했다. 기존 쿼리에서의 WHERE 절SELECT * FROM TABLE_NAME WHERE DATE_COL='20190101'; 변경한 WHERE 절SELECT * FROM TABLE_NAME WHERE DATE_COL=TO_DATE('20190101','YYYYMMDD');
[SQL/DATABASE] 문자열 데이터에서 숫자만 보기
·
Study/SQL
[SQL/DATABASE] 문자열에서 숫자만 추출하기 문자열로 된 시간 데이터에 조건을 걸고 싶은데 한글이 섞여 있고 숫자로만 이루어지지 않은 데이터들이 있었다. 이때 REGEXP_REPLACE(TIME,'[^0-9]') 이렇게 사용하면 문자열에 있는 숫자만 보여 준다. SELECT TIME FROM TABLE WHERE REGEXP_REPLACE(TIME,'[^0-9]');
[SQL/ORACLE] 특수 문자 모두 제거하는 방법
·
Study/SQL
ORACLE에서 특수 문자 제거하는 방법 IP 데이터를 다루어야 하는 조건이 있는데 어떻게 해야 할까 고민하다가 IP 주소에 있는 점을 없애고 범위를 설정하기로 했다. 따로 IP 데이터를 다루는 방법이 있기는 하지만 주어진 조건이 모호해서 일단 가이드 라인으로 점만 없애서 비교하는 걸로 결정했다. "." 점만 제거 하려다가 그냥 특수문자 전부 제거하는 방법이 있길래 그걸 사용했다. regexp_replace() 특수 문자를 제거하는 데에는 regexp_replace() 함수를 사용한다. 기존 replace 함수에서 확장된 함수이다. 정규 표현식을 쓸 수 있다. SELECT USER_NAME , REGEXP_REPLACE(USER_NAME,'[[:punct:]]','') as NAME FROM TABLE ..
[DATABASE/DB] SQL 문법 순서와 실행 순서
·
Study/SQL
쿼리가 복잡해질수록 문법 순서와 실행 순서를 정확하게 파악해야 한다. 문법 순서와 실행 순서는 서로 다르니 기억해 두고, 효율적으로 쿼리를 짤 것. SQL 문법 순서 SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY 실행 순서 FROM : 테이블 확인 ON :조인 조건 JOIN : 테이블 조인/병합 WHERE : 데이터 추출 조건 확인 GROUP BY : 특정 칼럼 기준으로 데이터 그룹화 HAVING : GROUP BY 이후 조건 확인 SELECT : 데이터 추출 DISTINCT : 중복 제거 ORDER BY : 데이터 정렬 참고한 문서 https://zu-techlog.tistory.com/29
[SQL/ORACLE] IN 연산자 사용 방법과 예제
·
Study/SQL
IN 연산자란? 특정 값, 조건에 속하는지 확인할 때 쓰는 연산자이다. 코딩 테스트나 학생 때는 IN 연산자를 자주 사용하지 않았었는데 업무 할 때 쿼리를 짜다 보니 IN 연산자 쓸 일이 참 많더라.. IN 연산자 예시 Student 라는 테이블에서 학번 (컬럼명은 NUM이라 하자) 이 2701, 2702, 2705, 2715, 2719인 학생들을 찾아본다고 가정하자. 처음 봤을 때 연속적인 값이 아니라서 어떻게 하지? 고민했었는데, IN 연산자 사용해서 하나하나 입력해 주어야 했었다. 쿼리를 작성하면 아래와 같다. SELECT * FROM STUDENT WHERE NUM IN (2701, 2702, 2705, 2715, 2719); 이렇게 질의하면 해당 학번에 있는 학생들만 조회될 것이다. NOT IN..