목록STUDY/SQL (9)
STUDY_SEONMIN
SQL에서는 MIN, MAX, AVG와 같은 집계함수를 제공해주고 있지만 중앙값을 찾는 함수는 따로 존재하지 않습니다. 중앙값을 구하기 위해서 사용자 정의 변수를 사용하는 방법이 있습니다. NUMBER 6 2 3 8 이런 테이블(T)이 있다고 해보겠습니다. SET @ROWNUM:=-1; SELECT @ROWNUM:=@ROWNUM+1 AS RNUM, NUMBER FROM T ORDER BY NUMBER; 사용자 정의 변수의 초기값을 -1로 설정하고 쿼리를 실행하게 되면 RNUM NUMBER 0 2 1 3 2 6 3 8 이처럼 결과를 얻을 수 있습니다. 얻어진 테이블에서 중앙값을 찾는다고 하면 RNUM=1, RNUM=2에 해당하는 3,6의 평균값인 4.5가 될 것입니다. 현재 사용자 정의 변수인 @ROWNU..

해커랭크에서 문제를 풀다가 피봇 테이블을 만드는 문제를 만났습니다. 위와 같은 테이블이 주어졌을 때 아래와 같은 결과를 만드는 문제였습니다. 아웃풋 결과를 보면 피봇 테이블의 컬럼은 각각 Doctor, Professor, Singer, Actor 입니다. 그렇다면 행 레이블은 무엇일까요?? 해커랭크에서 문제를 읽어보면 이름은 알파벳 순서로 정렬이 되어야 한다고 나와있습니다. 이를 토대로 생각해본다면 행 레이블은 각 직업 내에서 해당 이름이 몇 번째 순서인지를 의미한다는 것을 알 수 있습니다. 직업별 이름 순서를 먼저 표현하기 위해서 ROW_NUMBER()를 사용해주었습니다. SELECT NAME, OCCUPATION, ROW_NUMBER() OVER(PARTITION BY OCCUPATION ORDER ..

시험일 : 2021.05.29 성적공고일 : 2021.06.25 시험결과 : 86/100, 합격 공부를 시작한 계기 나는 원래 SQLD 자격증에 대해 회의적인 입장을 가지고 있다. 자격증이 있다고 해서 SQL을 잘 다룰 줄 아는 것이 아니기도 하고 각종 후기를 읽어보면 짧게는 3~4일만에도 자격증을 취득한 사람들이 있었기 때문이다. 그럼에도 SQLD 공부를 시작한 이유는 "내가 데이터분석가가 되기 위해서 SQL을 공부했다"라는 사실을 증명할 자료가 필요했기 때문이다. 그래서 사실 공부를 시작하기 전 딱히 어떤 지식을 얻는 것에 대한 기대는 전혀 하지 않고 공부를 시작했다. 공부를 하면서 사람들이 많이들 사용하는 노랭이(SQL 자격검정 실전문제) + 타 블로그에 정리된 자료를 이용해 공부를 했다. 시작 전..

이번 포스팅에서는 복수개의 테이블에서 데이터를 불러올 경우 일어나는 일에 대해 설명드리겠습니다. SELECT * FROM table1, table2, .. 위와 같이 여러 개의 테이블로부터 데이터를 불러오게 되면 JOIN과 같은 결과가 나오게 됩니다. table들을 JOIN하게 되면 가능한 레코드들의 모든 조합이 보여지게 되는데 이와 같은 결과가 나오는 것입니다. 이렇게 두 개의 테이블이 있을 때 JOIN을 하게 되면 가능한 모든 조합이 나오게 되므로 총 65개의 레코드가 불러와집니다. SELECT * FROM 회원 JOIN 동의항목; FROM 절에서 2개의 테이블로부터 데이터를 불러올 경우 위처럼 65개의 레코드가 불러와집니다. SELECT * FROM 회원, 동의항목; JOIN을 할 때는 ON절을 이..

SELF JOIN 셀프 조인은 이름 그대로 테이블 자기 자신과 조인하는 것을 의미합니다. 같은 테이블끼리 조인하는 것이므로 Alias설정을 잘 해주어야 컬럼 사용 시 혼동이 없습니다. SELF JOIN 예시 위와 같은 일자별매출 테이블이 있을 때, 일자별 누적 매출액을 확인하고 싶을 때 SELF JOIN을 사용할 수 있습니다. 일자별 누적 매출액을 확인하기 위해서는 2015.11.10의 데이터는 2015.11.01~2015.11.10까지의 데이터와 매칭이 되어서 매출액의 합계를 구해주어야 합니다. 우선 데이터를 매칭시키는 작업부터 해보겠습니다. SELECT A.*, B.* FROM 일자별매출 AS A JOIN 일자별매출 AS B ON A.일자 >= B.일자 ORDER BY A.일자, B.일자; SQL문을..

집계함수란? 여러 행으로부터 하나의 결과값을 반환하는 함수입니다. 대표적으로 COUNT(), AVG(), MAX(), MIN(), SUM() 등이 있습니다. 집계함수의 사용 1) SELECT 절에서의 사용 - GROUP BY를 이용해 데이터들을 그룹으로 묶은 뒤, 각 그룹별로 카운팅을 하거나 특정 컬럼의 평균, 합 등을 계산하는 데에 주로 쓰입니다. 회원ID 별 총 주문금액을 계산해보겠습니다. SELECT 회원ID, SUM(주문금액) AS 합계 FROM 주문 GROUP BY 회원ID; 회원ID 별 총 주문수를 계산해보겠습니다. SELECT 회원ID, COUNT(*) AS CNT FROM 주문 GROUP BY 회원ID; 집계함수는 nested function처럼 사용할 수는 없습니다. 위에서 계산된 CNT..
데이터를 다루다 보면 데이터에 NULL값이 들어있는 경우가 종종 있습니다. NULL은 아무런 데이터가 들어있지 않다는 의미인데 연산을 할 때 NULL은 어떻게 처리가 되는 지에 대해 알아보겠습니다. 1. Row-wise caculation 가로 방향으로 연산을 하게 되면 NULL을 포함한 연산은 무조건 NULL이 되게 됩니다. COL1 COL2 1 2 NULL 3 위의 테이블에서 COL1과 COL2를 더한 결과를 추출하게 된다면 SELECT COL1+COL2 AS COL3 FROM TableA COL3 3 NULL 과 같이 결과가 나오는 것입니다. 2. Column-wise calcuation 세로 방향으로 연산을 하게 되면 NULL값을 무시하고 연산이 진행됩니다. COL1 COL2 COL3 30 NUL..

JOIN 데이터베이스 내에 존재하는 테이블들을 결합해서 나타내고자 할 때 사용합니다. 예를 통해 설명해보겠습니다. 이렇게 두 개의 테이블이 있을 때 JOIN을 하게 되면 가능한 레코드들의 모든 조합으로 테이블이 만들어 집니다. SELECT * FROM People JOIN Region INNER JOIN JOIN하고자 하는 두 테이블의 교집합에 해당하는 데이터들을 보고자 할 때 사용하는 JOIN 방법입니다. 위의 예제 테이블들은 REGION_CODE으로 서로 관계를 맺고 있습니다. 사람들이 사는 지역의 지역명을 확인하고 싶다면 INNER JOIN을 사용해서 확인할 수 있습니다. SELECT * FROM People JOIN REGION ON People.REGION_CODE = REGION.REGION_..
외래키(FOREIGN KEY) 데이터베이스의 참조 무결성을 유지하기 위해 필요한 것으로, 하나의 테이블에서 다른 테이블의 기본키를 참조하는 것을 의미합니다. 어떤 쇼핑몰의 데이터 베이스에 다음과 같은 테이블들이 있다고 생각해봅시다. USER_ID USER_NAME ADDRESS 1 AIR 05033 2 POT 08044 ORDER_ID USER_ID PRODUCT 1 1 노트북 2 1 마우스 3 2 핸드폰 4 2 책 5 3 가방 두 개의 테이블이 있을 때, ORDER 테이블에 있는 ORDER_ID 5번 주문은 USER_ID 3인 사용자의 주문입니다. 하지만 USER 테이블을 보면 USER_ID 3을 갖는 사용자는 존재하지 않습니다. 이렇게 되면 쇼핑몰 입장에서는 누가 주문한 것인지 알 수가 없어 물건을 ..