[SQL] 인프런 Do it! SQL 입문 정리 (4) - 함수 요약 총정리
안녕하세요 진자이입니다 :) BOAZ 2023 하계 스터디로 SQL을 공부하게 되면서 SQL을 처음부터 다시 공부하게 되었습니다. 공부한 내용을 정리하며 복기도 하고, 많은 분들에게 도움이 되었으면 하는 마음으로 SQL 기초에 대한 내용을 기록하려고 합니다.
OVERVIEW
- 문자열 함수 - Concatenation
- 날짜 함수
- 집계 함수
- 수학 함수
- 순위 함수
- 분석 함수
* 시작에 앞서, 함수에 대한 내용은 자주 활용하는 것들만 정리하였으므로, 자세한 내용은 Do It SQL 입문 책 혹은 다른 글을 참고해주세요
문자열 함수
concatenation Strings : 연결 연산자 (+)를 사용하여 두 문자열을 연결할 수 있음
select N'문자열을' + N'연결해 보겠습니다.'
select 'The ' + Symbol + '''s full corporate name is' +company_name from nasdaq_company
--실제 활용
select
symbol + N'의 industry는' + industry + N' 입니다.'
from nasdaq_company where symbol = 'DBA'
concat : 숫자나 문자를 인수로 사용하여 자동으로 연결하며 출력값은 항상 문자열
select concat(N'문자열을',N'연결해 보겠습니다.')
SELECT concat(N'숫자', 1,,N'과 문자열을 연결해보겠습니다.')
--실제 활용
select
CONCAT(symbol,N'의 industry는',industry,N' 입니다.'
from nasdaq_company where symbol = 'DBA'
+로 연결할 때는 만약 데이터가 없으면 모두 다 출력하지 않지만, concat은 null 값으로 처리해 출력한다.
ISNULL : 두 개의 매개변수가 필요하며 검사할 값과 NULL을 대체할 값이 필요하다
select
CONCAT(symbol,N'의 industry는',INSULL(industry,'UKNOW'),N' 입니다.'
from nasdaq_company where symbol = 'DBA'
COALESCE은 여러 매개변수 사용이 가능하며, NULL이 아닌 첫 번째 값을 반환한다.
select
CONCAT(symbol,N'의 industry는',
COALESCE(N'여기일까? (1)', industry,N'여기일까? (2)'), '입니다')
from nasdaq_company where symbol = 'DBA'
LTRIM/RTRIM : 왼쪽/오른쪽 공백을 제거한다.
SELECT
COL1,
LTRIM(COL1) AS [LTRIM],
RTRIM(COL1) AS [RTRIM]
FROM (
SELECT N' 왼쪽 공백' AS COL1
UNION ALL
SELECT N'오른쪽 공백 '
) AS X
REPLACE : 특정 문자열을 다른 문자열로 대체한다
SELECT REPLACE(N'A를 B로 바꿔보겠습니다.', 'A','B')
REVERSE는 역순으로 문자열을 반환한다.
SELECT REVERSE(N'문자열을 뒤집는다.')
날짜 함수
GETDATE : 서버의 현재 시간을 반환
SELECT GETDATE()
DATEADD : 날짜를 더하거나 뺄 수 있다.
-- DATEADD(<DATEPART>,<NUMBER>,<DATE>)
SELECT DATEADD(YEAR, 1, '2021-04-21')
DATEDIFF : 두 날짜 차이를 반환한다
DATENAME : 지정된 날짜의 일부를 반환한다
DATEPART : 지정된 날짜의 일부를 반환한다.
SELECT
DATEDIFF(DAY, '2020-01-01','2021-01-01') AS [DATEDIFF],
DATENAME(WEEKDAY, '2021-04-21') AS [DATENAME]
DATEPART(DAY, '2021-04-21') AS [DATEPART]
날짜 포맷 / 시간 포맷
- CONVERT(VARCHAR, GETDATE(), 1) → MM/DD/YY
- CONVERT(VARCHAR, GETDATE(), 2) → YY.MM.DD
- CONVERT(VARCHAR,GETDATE(),111) → YYYY/MM/DD
- CONVERT(VARCHAR,GETDATE(),112) → YYYYMMDD
- CONVERT(VARCHAR, GETDATE(), 8) → HH:MM:SS
- CONVERT(VARCHAR, GETDATE(), 14) → HH:MM:SS:NNN
집계 함수
- SUM, AVG, MIN, MAX
- SUM([CLOSE]) AS COL_SUM
- MIN, MAX의 경우 사용하는 데이터, 도메인에 따라 다르게 출력될 수 있음!
- COUNT : NULL이 아닌 행 수를 카운트
- NULL을 포함한 전체 ROW를 카운트 하기 위해서 COUNT(*)를 사용
- DISTINCT : 중복 제거된 행의 값을 반환
- CUBE : 집계 쿼리에 대한 그룹화 수준의 모든 조합에 대한 소계
- ROLLUP : 집계 쿼리에 대한 계층화 구조의 부분합
-- CUBE 예시
SELECT
SECTOR,
INDUSTRY,
SUM([CLOSE_PRICE]) AS COL_SUM
FROM NASDAQ_COMPANY
GROUP BY CUBE(SECTOR, INDUSTRY)
-- ROLLUP 예시
SELECT
SECTOR,
INDUSTRY,
SUM([CLOSE_PRICE]) AS COL_SUM
FROM NASDAQ_COMPANY
GROUP BY ROLLUP(SECTOR, INDUSTRY)
수학 함수(일부)
- ABS : 절대값을 반환
- ROUND : 특정 길이나 전체 자릿수로 반올림한 숫자 값을 반환 round(1.9999, 2)
- RAND : 0부터 1까지의 랜덤 숫자 반환
- POWER : 거듭제곱 반환
- LOG : 자연로그 반환
- PI : 파이의 상수 값을 반환 (pi())
- SQUARE : 지정한 FLOAT 값의 제곱을 반환
- SQRT : 지정한 FLOAT 값의 제곱근을 반환
- ACOS : 지정된 FLOAT 값의 코사인 값을 가지는 각도를 라디안 단위로 반환하는 기능
- ASIN : 지정된 FLOAT 값을 사인 값으로 가지는 각도를 라디안 단위로 반환하는 기능
- ATAN : 탄젠트가 지정된 FLOAT 식인 각도를 라디안 단위로 변환하는 기능
- DEGREES : 라디안으로 지정된 각도에 대해 각도를 도 단위로 반환
RANK 함수
SELECT
x.col1,
row_number() over (order by col2 asc) as [row_number], --순차적으로 순서 부여(순위 x)
-- rank는 정렬된 결과값에서 순위를 부여(동일한 순위일 경우 111 처리, 단 다음 순위 4)
rank() over (order by col2 asc) as [RANK],
-- rank는 정렬된 결과값에서 순위를 부여(동일한 순위일 경우 111 처리, 단 다음 순위 2)
DENSE_RANK() over (order by col2 asc) as [DENSE_RANK],
-- NTILE은 분위수 기준으로 그룹을 나눔(1,2,3)
NTILE(3) over (order by col2 asc) as [Quartile]
ANALYTIC 함수 : 분석 함수
LAG / LEAD : 현재 행 기준으로 앞/뒤의 행을 참조
-- 예시
SELECT
DATE,
LAG ([CLOSE]) OVER (ORDER BY [CLOSE] ASC) AS LAG_PRICE,
[CLOSE],
LEAD ([CLOSE]) OVER (ORDER BY [CLOSE] ASC) AS LEAD_PRICE
FROM STOCK
WHERE SYMBOL = 'MSFT'
- CUME_DIST() : 누적 분포 구하기
- PERCENT_RANK() : 상대 순위 구하기
- FIRST_VALUE / LAST_VALUE : 정렬된 첫 번째 행, 마지막 행 구하기