본문 바로가기

Programming/SQL11

ROW 펼치기 팁 - 쿼리로 행(세로)을 열(가로)로 펼치는 방법 쿼리를 짜다보면 쿼리 결과를 가로로 만들기 위해서 피벗을 사용해야 할 경우가 있다.물론 단순한 SELECT, UPDATE, DELETE, INSERT만 하는 경우에는 이런 쿼리를 짤 필요가 없겠지만 흔히 분석계 쪽에서의 활용을 위해 피벗을 해야한다면 상당히 골치아프다. 물론 DB가 피벗을 지원한다면 배워서 사용하면 된다. 하지만 피벗 결과를 N번 다시 피벗하게 되는 경우가 있는데 그때는 머리가 아프다.참고로 SQL SERVER는 PIVOT 함수를 지원한다. 하지만 지원하지 않는 DB가 꽤 있다. 그럴 때를 대비해서 쉽게 쿼리 세로 결과를 가로로 만드는 방법이다.즉 행을 열로 펼치는 방법을 설명하고자 한다. (로우를 컬럼으로 만드는 방법이다) 예를 들어서 학생에게 신발 5개씩을 추천하기 위한 테이블을 생성.. 2018. 5. 25.
RANK(), DENSE_RANK(), NTILE() 함수 사용하기 지난 포스팅에서 ROW_NUMBER() OVER(PARTITION BY ~ ORDER BY ~) 를 활용하여 랭킹을 매겼었다.이번 시간에는 RANK(), DENSE_RANK(), NTILE()를 활용하여 랭킹을 매겨보자. 보통 우리가 순위를 매길 때 공동 점수가 있으면 누적 순위를 할 것인지 그냥 할 것인지를 정해야되는데 이번 시간에 쿼리로 짜는 방법을 설명하려고 한다 CREATE TABLE score_tbl( seq INT, team_cd int, name VARCHAR(30), score INT ) GO INSERT INTO score_tbl(seq, team_cd, name, score) VALUES ( 1, 10, '호날두', 97 )INSERT INTO score_tbl(seq, team_cd,.. 2018. 5. 19.
ROW_NUMBER() 사용 방법 - 순위를 매겨보자 MSSQL에서 ROW_NUMBER() 함수는 ROW에 번호를 붙이는 함수이다.이 함수는 PARTITION BY를 활용하면 사용 방안이 무궁무진하다GROUP BY와 같은 기능이며 디멘젼을 잘 넣어사용하면 큰 힘을 발휘하는 함수라고 볼 수 있다. ROW_NUMBER()를 활용해서 순위를 매겨보도록 하겠다. 참고로 순위를 매기는 함수는 RANK()함수가 별도로 있다. CREATE TABLE score_tbl( seq INT, name VARCHAR(30), score INT ) GO INSERT INTO score_tbl(seq, name, score) VALUES ( 1, '호날두', 11 )INSERT INTO score_tbl(seq, name, score) VALUES ( 2, '메시', 20 )INS.. 2018. 5. 18.
데이터 정규화 (제 1차~5차 정규화) 정규화의 목적데이터를 효율적으로 저장하고 중복을 방지하여 저장 공간을 낭비를 줄이는 것이다. 하지만 테이블 갯수가 많아지니 쿼리문을 짤 때 join을 사용해야한다.테이블 간의 관계에서 올바르지 못한 삽입, 삭제, 업데이트 이상이 발생하지 않도록 한다.새로운 형태의 데이터가 삽입될 때 관계를 재구성할 필요성을 줄일 수 있다. 정규화는 제 1 정규화부터 제 5 정규화까지 존재하며 흔히 정규화 대상은 1~3 정규화까지만 한다.. 제1 정규화어떤 릴레이션에 속한 모든 도메인이 원자값을 갖도록 하여 더 이상 분해할 수 없도록 한다. 이름 취미 노블레스 컴퓨터, 게임 라이제르 축구, 야구 위와 같은 테이블의 경우 취미가 n개일 때 옆에다가 계속 써주던지, 아니면 취미1, 취미2, 취미3 컬럼을 계속 만들어주던지 해.. 2018. 4. 24.