DATA

[SQL] 인프런 Do it! SQL 입문 정리 (4) - 함수 요약 총정리

진자이 2023. 7. 19. 13:41

안녕하세요 진자이입니다 :) 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 : 정렬된 첫 번째 행, 마지막 행 구하기