728x90
반응형

DB 220

[DB][MySQL] ROW_NUMBER()와 WITH (CTE)를 사용할 때 성능 차이

✅ 시나리오 예제: 게시판 페이징데이터 상황게시글 테이블 T_BD에 10만 건의 데이터가 있다고 가정게시글에는 공지사항(상단 고정) 여부, 등록일, 제목, 본문 등의 컬럼이 있음목표: 특정 게시글(BD_CD)이 몇 페이지에 있는지 계산① 인라인 뷰 (서브쿼리) 방식sql복사편집SELECT * FROM ( SELECT BD_CD , BD_TITLE , ROW_NUMBER() OVER (ORDER BY NOTI_YN DESC, INS_DT DESC) AS RN FROM T_BD WHERE USE_YN = TRUE ) R WHERE R.BD_CD = 'BD12345'; 🟢 장점BD_CD 조건이 바깥쪽에서 바로 필터링되므로 불필요한 전체 정렬을 피할..

DB 2025.05.26

[DB][Oracle] 동적으로 정렬이 바뀔 때 행 번호 매기기 (ROWNUM, ROW_NUMBER())

✅ 방법 1: SQL에서 여러 정렬 기준을 동적으로 설정 (CASE WHEN 사용)SELECT ROW_NUMBER() OVER ( ORDER BY CASE WHEN :sort_col = 'emp_id' THEN emp_id END , CASE WHEN :sort_col = 'emp_name' THEN emp_name END , CASE WHEN :sort_col = 'salary' THEN salary END ) AS RN , emp_id , emp_name , salary FROM employees;:sort_col은 바인딩 변수 (예: 'emp_id', 'emp_name', 'salary')정렬 기준을 바꾸면 그에 따라..

DB 2025.05.19

[DB] LISTAGG / STRING_AGG

✅ 1. 기본 개념항목LISTAGG (Oracle)STRING_AGG (PostgreSQL, SQL Server)목적문자열 집계 (여러 행 → 하나의 문자열)동일지원 DBOraclePostgreSQL, SQL Server 등기본 구문LISTAGG(col, ', ') WITHIN GROUP (ORDER BY col)STRING_AGG(col, ', ')정렬WITHIN GROUP (ORDER BY col) 필요ORDER BY col 옵션 제공 (WITHIN GROUP 아님)중복 제거DISTINCT 서브쿼리 필요DISTINCT 바로 사용 가능 (PostgreSQL 13+) ✅ 2. 예제 비교📌 Oracle (LISTAGG)SELECT DEPT_ID , LISTAGG(EMP_NAME, ', ') WIT..

DB 2025.05.16

[DB][Oracle] LISTAGG

LISTAGG는 Oracle DB를 포함한 SQL 데이터베이스에서 여러 행의 값을 하나의 문자열로 집계(Aggregation) 할 때사용하는 함수입니다.주로 그룹화된 데이터를 문자열로 연결할 때 유용합니다.📌 기본 문법LISTAGG(column_name, 'delimiter') WITHIN GROUP (ORDER BY column_name) column_name: 연결할 열 이름'delimiter': 각 값 사이에 넣을 구분자 (예: ',', ' | ', 등)WITHIN GROUP (ORDER BY ...): 연결할 값들의 정렬 순서를 지정📌 예시예제 테이블: STUDENT_COURSESTUDENT_IDCOURSE_NAME1001Math1001Science1001History ▶ LISTAGG 사용S..

DB 2025.05.15

[DB][Oracle] INSTR

INSTR는 SQL에서 문자열 내에서 특정 문자열의 위치를 찾는 함수입니다. 📌 기본 문법: INSTR(string, substring [, start_position [, occurrence]])📘 파라미터 설명:string: 검색 대상 문자열substring: 찾고자 하는 부분 문자열start_position (선택): 검색을 시작할 위치 (기본값은 1)occurrence (선택): 몇 번째로 나타나는 substring을 찾을지 (기본값은 첫 번째) INSTR(KM.CUST_CD, #{param.sortCustCds}) DESC은 특정 고객 코드(KM.CUST_CD)가 정렬 우선순위 대상 문자열(#{param.sortCustCds})에얼마나 앞에 있는지를 기준으로 정렬하는 SQL 구문 일부입니다..

DB 2025.04.11

[DB][SQL] COUNT(DISTINCT *)/ COUNT(*) 차이

✅ COUNT(DISTINCT A.userid)설명: 같은 userid가 여러 번 등장하더라도 한 번만 계산됩니다.의미: 유니크한 사용자 수, 즉 조회한 고객 수(중복 제거)예시:👉 COUNT(DISTINCT userid) = 3 (user1, user2, user3)useriduser1user2user1user3✅ COUNT(A.userid)설명: userid가 중복되더라도 전부 카운팅합니다.의미: 총 조회 수(누적)예시 (같은 테이블):👉 COUNT(userid) = 4🧩 정리:항목의미중복 제거 여부사용 예COUNT(DISTINCT A.userid)조회한 고객 수✅ 제거됨"몇 명이 봤는가?"COUNT(A.userid)총 조회 횟수❌ 제거되지 않음"몇 번이나 봤는가?"

DB 2025.03.31

[DB][MySQL] STR_TO_DATE 함수

MySQL에서 문자열을 특정한 날짜 형식으로 변환하는 함수입니다.주로 날짜 또는 시간이 문자열로 저장된 데이터를 DATETIME, DATE, TIME 형식으로 변환할 때 사용됩니다.STR_TO_DATE(string, format)string: 변환할 문자열format: 문자열의 날짜/시간 형식을 지정하는 포맷 문자열 자주 사용하는 포맷 코드코드설명예시%Y4자리 연도2024%y2자리 연도24%m2자리 월 (01~12)03%d2자리 일 (01~31)15%H24시간제 시 (00~23)14%i분 (00~59)30%s초 (00~59)45%pAM/PMAM%h12시간제 시 (01~12)02  1. 문자열을 날짜(DATE)로 변환SELECT STR_TO_DATE('2024-03-14', '%Y-%m-%d');✅ 결과:..

DB 2025.03.14
728x90
반응형