SQL 9

Group by시 그룹화 대상이 아닌 컬럼 가지고 오기

관련 SQL 프로그래머스 문제 : 물고기 종류 별 대어 찾기문제점 fish_type 컬럼으로 Group by 시 fish_type 컬럼 외에는 집계함수 외에는 사용하지 못함 -> ID컬럼으로 인하여 this is incompatible with sql_mode=only_full_group_by 오류 발생 § 해당 오류 쿼리 예시 select ID, FISH_NAME, MAX(LENGTH) from fish_info f join fish_name_info fn on f.fish_type = fn.fish_type group by f.fish_type원인 : only_full_group_by 설정이 ON되어있기 때문 □ only_full_group_by를 ON을 설정하는 이유 : 그룹화되지 않은 컬럼..

SQL 2025.05.15

CTE 사용법과 재귀함수

□ 비교 일반 CTE재귀 CTE개념일시적으로 결과 집합을 변수처럼 저장해서 쿼리 전체에서 재사용 가능자기 자신을 참조하며 반복적으로 실행 → 계층형 데이터를 쉽게 설계할 수 있게 함. (오라클에 start with silbling ~ 의 쓰임새와 동일)형식WITH CTE_NAME AS ( 서브쿼리) WITH RECURSIVE CTE_NAME AS ( 기본 쿼리 UNION ALL 재귀 쿼리)※ UNION ALL을 통해 루트에서 시작해 자식 → 손자 ... 순으로 전개CTE를 여러번 사용해야 하는 경우 (1) 일반 CTE 여러개 사용WITH cte1 AS (...), -- 첫 번째 CTE cte2 AS (...), -- 두 번째 CTE cte3 AS (...) -- 세 번째 CTE..

SQL 2025.05.12

프로그래머스 SQL - 상위 퍼센트 대로 나누기 / percent_rank()

프로그래머스 - 대장균의 크기에 따라 분류하기 2번 문제  -정답-select ID , (case when p   필요한 지식  percent_rank() : 상대적 백분위 수를 나타낸다. 값이 낮을 수록 값이 크다."상위 ~ 퍼센트" 값을 구할때 매우 유용할듯기본구성 Percent_rank() over(partition by 컬럼1 order by 컬럼2 ASC/DESC) 이때 partition by 는 생략 가능 ,  select 고객번호, 마일리지 , percent_rank() over(partition by 지역 order by 마일리지 DESC)*100 백분위from 고객order by 백분위 Asc;

SQL 2025.03.27

[DB]NULL값 허용과 관계테이블

n대 n의 관계에서는 '관계테이블'이 필수, 1대 n의 관계에선 n(자식)쪽에 FK를 두면 된다 (단, n(자식)쪽이 먼저 데이터가 생성된다면 FK쪽에 null값이 들어올 수도 있다. -> 널값을 회피하기 위해  '관계테이블' 활용해도 됨  => 같은 활용으로 1대1관계에서도 관계테이블을 사용하는 경우가 있음) [예시]Orders(자식테이블 多) -부모테이블의 데이터가 먼저 발생해야 자식테이블에 있는 FK값이 null 값이 안됨. 단, 논리적으로 자식테이블이 부모테이블보다 먼저 발생되므로ORDERS 테이블의 FK 칼럼의 속성값이 null값이 올 수 밖에 없다.  이럴 경우 관계 테이블을 만들어서 null값을 회피해도 되지만, 데이터가 많지 않아, 낭비되는 메모리의 비율이 크지 않다면, 널값을 허용함으로..

SQL 2024.11.20

[Oracle] 비율함수

Ratio_to_report() over() : 해당 값이 전체 값의 몇 프로를 차지하는지? ( 0 Percent_rank() over() : 랭킹 / 전체 건수 : 꼴지='1', 랭킹이 높을 수록 0에 가까움 ( 0 Cume_dist() over() : 현재 행까지 누적 건수 / 전체 건수 ( 0 Ntile() over() : 주어진 수만큼 행들을 n등분 / 같은 값이더라도 등수를 내림 / 2그룹으로 나누었을때 똑같은 행수로 나누어 떨어지지 않으면 1그룹에 할당한다

SQL 2024.10.25

[oracle sql] 의사 컬럼, 분석 함수, 계층 쿼리

1. 의사컬럼 물리적 테이블에는 존재하지 않지만, select 결과셋(select절에서 추가됨)에는 존재하는 컬럼 rowid : 자바의 hashcode같은 메모리 주소, 각 행들의 키값, Index로 사용rownum : 결과셋의 번호를 순서대로 붙인 것select rowid, rownum, empno, ename from emp;  의사컬럼이 추가되는 시점은 select절이다. order by 전에 추가된다.select rowid, rownum, empno, ename from emp order by sal desc; 2. 분석 함수일반테이블의 결과셋과 group by 의 결과셋을 같이 출력할때 사용 □ 윈도우 함수(오버 함수)를 사용하는 경우 (내부적으로 join 등이 실행된다)형태 : 함수이름(매개값..

SQL 2024.10.22

Group by 확장기능

union all =(축약)=> grouping sets =(축약)=> rollup / cube 1. group by grouping sets(); emp 테이블의 gender 을 그룹핑 + emp 테이블의 ()을 그룹핑 = 두개의 group by 결과물은 union all로 한 것과 같다.// grouping set을 사용하는 경우select gender, count(*) from emp group by grouping set (gender, ());// union all을 사용하는 경우select gender, count(*) from emp group by genderunion all select '전체', count(*) from emp; group by 절 내 실행 순서는 (1)group by ..

SQL 2024.10.21