본문 바로가기

IT Story

(26)
주가 분석하기 01. 최고가, 최저가, 가격 차이, 비율 검색하기 SELECT symbol, CONVERT(DECIMAL(18,2), MIN([close])) AS w52_min, CONVERT(DECIMAL(18,2), MAX([close])) AS w52_max, CONVERT(DECIMAL(18,2), MAX([close])) - MIN([close]) AS w52_diff_price, CONVERT(DECIMAL(18,2), (MAX([close])) - MIN([close]))/ MIN([close]) * 100 AS w52_diff_ratio FROM stock WHERE date > = DATEADD(week, -52, '2021-10-04') AND date < = '2021-10-04' GROUP BY..
SQL 함수: 분석 함수 행 그룹을 기반으로 집계해 이동 평균, 누계, 백분율, 그룹 내 상위 N개의 결과를 계산한다. 앞 또는 뒤 행 참조하기: LAG, LEAD 함수 하루 전 날짜와 오늘 날짜 데이터를 비교할 때, LAG 또는 LEAD 함수를 사용하면 간편하다. LAG 함수는 현재 행에서 바로 앞의 행에 접근하고, LEAD 함수는 현재 행에서 바로 뒤의 행에 접근한다. 물론, offset 인자에 전달한 값에 따라 이전 또는 이후 몇 번째 행의 데이터를 참조할지 결정할 수 있다. LAG, LEAD 함수의 기본 형식 LAG(scalar_expression [, offeset], [default]) OVER ([partition_by_clause] order-by_clause) 다음은 stock 테이블에서 symbol =' MSF..
SQL 함수: 순위 함수 ROW_NUMBER, RANK, DENSE_RANK, NTILE 함수. 전체 데이터에 순위를 부여할 수도 있고, PARTITION 옵션을 사용해 지정 그룹에 따라 그룹 내 순위를 부여할 수 있다. 유일값으로 순위 부여하기: ROW_NUMBER 함수 모든 행에 유일값으로 순위를 부여한다. 같은 순위의 경우 정렬 순서에 따라 순위를 부여한다. ROW_NUMBER 함수의 기본 형식 ROW_NUMBER () OVER([PARTION BY 열, ..., [n] order by 열) SELECT symbol, sector, ROUND(close_price, 0), ROW_NUMBER() OVER (ORDER BY ROUND(close_price, 0) DESC) FROM nasdaq_company 해석: nasda..
SQL 함수: 수학 함수 절댓값 구하기: ABS 함수 SELECT ABS(-1.0), ABS(0.0), ABS(1.0) SELECT open_price - close_price As diff, ABS(open_price - close_price) As abs_diff FROM nasdaq_comany 결과 diff abs_diff 23.2763671875 23.2763671875 -59.19921875 59.19921875 -24.0498046875 24.0498046875 양수 음수 여부 판단하기: SIGN 함수 SELECT SIGN(-125), SIGN(0), SIGN(564) (열 이름 없음) (열 이름 없음) (열 이름 없음) -1 0 1 천장값과 바닥값 구하기: CEILING, FLOOOR 함수 CEILING 함수는 천..
SQL 함수: 집계 함수 합계, 평균, 최대, 최소, 중간, 표준편차 함수 조건에 맞는 데이터 개수 세기: COUNT, COUNT_BIG 함수 COUNT_BIG : 데이터 개수가 21억 개를 초과할 때 SELECT COUNT(*) FROM nasdaq_company 결과 8918 nasdaq_company 테이블에서 ipo_year열 기준으로 그룹화해서 각 ipo_year 그룹에 몇 건의 데이터가 있는지 확인 SELECT ipo_year, COUNT(*) FROM nasdaq_company Group By ipo_year Order By ipo_year 결과 ipo_year (열 이름 없음) NULL 4 0 859 1970 29 1971 1 1972 19 1973 121 nasdaq_company 테이블에서 ipo_year열과 ..
SQL 함수: 날짜 함수 서버 현재 날짜, 시간 반환하기: GETDATE, SYSDATETIME 함수 GETDATE : 소수 3째 자리까지 SYSDATETIME: 소수 7째 자리까지 시간 표현 SELECT GETDATE(), SYSDATETIME() 결과 (열 이름 없음) (열 이름 없음) 2022-12-02 13:58:39.487 2022-12-02 13:58:39.4886374 서버 현재 UTC 날짜, 시간 반환하기: GETUTCDATE, SYSUTCDATETIME 함수 UTC: 협정 세계시(Uinversial Time Coordinated) SELECT GETDATE(), GETUTCDATE(),SYSUTCDATETIME() 결과 (열 이름 없음) (열 이름 없음) (열 이름 없음) 2022-12-02 14:01:20.00..
SQL 함수: 문자열 함수 문자열 연결, 형식 변환, 공백 제거, 치환 등이 있다. 문자열과 문자열 연결하기: CONCAT 함수 연결 연산자 +로 문자열을 연결하는 방법 SELECT symbol + ' : ' + comapny_name FROM nasdaq_company CONCAT 함수로 문자열을 연결하는 방법 SELECT CONCAT('I', 'Love', 'SQL') 열에 적용할 때도 마찬가지다. CONCAT 함수로 열 이름과 문자열 연결 SELECT CONCAT (symbol, ' : ', company_name) FROM nasdaq_company 문자열과 숫자 또는 날짜 연결하기: CAST, CONVERT 함수 숫자형 데이터를 +로 연결하면 에러가 발생한다 CAST, CONVERT 함수는 숫자형이나 날짜형 등의 데이터를..
공통 테이블 식(Common Table Expression, CTE) 주로 데이터베이스에 없는 테이블이 필요할 때 사용하며, 바로 다음에 실행할 SELECT 문에만 사용해야 한다. 일반 CTE CTE의 기본 형식 WITH [CTE_테이블 이름] (열 이름1, 열 이름 2, ...) AS ( ) SELECT [열 이름] FROM [CTE_테이블 이름] 예제) WITH cte_stock_price (date, symbol, price) AS ( SELECT date, symbol, [close] FROM stock WHERE date >= '2021-01-01' AND date = '2021-01-01' AND date = '2021-02-01' AND date = '2021-01-01' AND date = '2021-01-07' AND date = '2021-01-01' A..
서브 쿼리 쿼리 안에 포함되는 또 다른 쿼리. 서브 쿼리는 조인하지 않은 상태에서 다른 테이블과 일치하는 행을 찾거나, 조인 결과를 다시 조인할 때 사용할 수 있다. 서브 쿼리의 특징 반드시 소괄호로 감싸 사용한다. 주 쿼리를 실행하기 전에 1번만 실행된다. 비교 연산자에 서브 쿼리를 사용하는 경우 서브 쿼리를 오른쪽에 기술해야 한다. 내부에는 정렬 구문인 ORDER BY 문을 사용할 수 없다. Where 문에서 서브 쿼리 사용하기 where 문에서 사용하는 서브 쿼리를 중첩 서브 쿼리라고 한다. 중첩 서브 쿼리는 조건문의 일부로 사용한다. 서브 쿼리를 비교 연산자 =, =, 와 함께 사용할 때는 반드시 서브 쿼리의 반환 결과가 1건 이하여야 한다. 반환 결과가 2건 이상인 경우에는 다중 행 연산자를 사용해야 한다..
조인(Join): 외부 조인 내부 조인은 두 테이블을 조인해 조인 조건으로 사용한 열에 있는 같은 값을 조합해 검색한다. 하지만 다른 테이블에 있는 행에서 일치 항목이 아닌 행을 조합해 검색해야 할 때도 있다. 그런 경우에 외부 조인을 사용한다. 예를 들어, 상품을 주문한 고객과 주문하지 않은 고객을 포함해 주문 내역을 함께 검색하고 싶다면 외부 조인을 사용할 수 있다. 즉, 외부 조인은 열의 일치 항목을 고려하지 않고, 한쪽 테이블을 다른 쪽 테이블에 조합할 때 사용한다. 외부 조인의 기본 형식 SELECT [열 이름] FROM [테이블 1] OUTER JOIN [테이블2] ON [테이블1.열] = [테이블2.열] WHERE [검색 조건] LEFT, RIGHT는 기준 테이블을 정하는 것이다. A 테이블을 기준으로 B 테이블을 조인..