Computer Science/데이터베이스

PostgreSQL 문법 정리5 - 내장함수

ssun_bear 2023. 4. 14. 01:25
반응형

1. union / union all

두 집합을 중복을 제거하고 합집합 형태로 조회, union all은 중복제거 x

select 
	A.*
from 
	(select 
		column1 ,
		column2
	from 
		A_table
	union
	select
		column3 ,
		column4
	from 
		B_table) A;

2. || , concat

문자열 합치기

select
	'My name is ' || name;
from
	name_table;
--Tom Holland--

select 
	concat('Hi ', name, ' is my name');
from
	name_table;
--Hi Tom Holland is my name--

3. substring

문자열 자르기 substring(문자열, 시작점, 시작점부터 개수)

select 
	substring('Tom Holland', 1 ,3);
--Tom--

4. to_date

문자열을 date로 변환

select 
	to_date('2023-03-30', 'yyyy-mm-dd');

5. to_char

숫자나 date를 문자열로 변환

select 
	to_char(now(), 'yyyy-mm-dd');
--2023-03-31--

'FM999,999,999' 포멧을 사용하여 숫자를 천 단위마다 컴마를 넣어 조회할 수 있다.
*포멧의 수치는 출력될 값의 예상 수치보다 높게 잡아야하며 .을 넣어서 소수점자리도 맞출 수 있다.
select 
	to_char(1000000, 'FM999,999,999');
--1,000,000--    

6. coalesce

null값 치환

select 
	coalesce(name, '이름없음')  
from 
	name_table
--name의 값이 null일 경우 '이름없음'으로 조회--

7. upper, lower

대소문자 변환

select
	upper('tom');
--TOM--

select
	lower('HOLLAND');
--holland-

8. 집계함수 및 숫자 관련 함수

count, sum, avg, round, max, min

select 
	name ,
	count(*)
from 
	name_table
group by
	name;
--name 컬럼을 그룹화하여 name별 개수 count--


select 
	sum(A.cnt)
from 
	(select 
	name ,
	count(*) as cnt
from 
	name_table 
group by
	lcl.jimok)as A;
--총합계--


select 
	round(avg(A.cnt))
from 
	(select 
	name ,
	count(*) as cnt
from 
	name_table 
group by
	lcl.jimok)as A;
--평균 값을 반올림(2번째 인자로 소수점자리 지정 가능)--


select 
	max(A.cnt),
    min(A.cnt)
from 
	(select 
	name ,
	count(*) as cnt
from 
	name_table 
group by
	lcl.jimok)as A;
--최댓값과 최솟값--

9. distinct

중복 제거

select distinct
	name
from
	name_table

10. array_agg(배열로 반환), array_to_string(배열을 문자열로 반환)

select
	name
from
	name_table
--Tom Holland--
--Petter Parker--
--Spider-Man--

위와 같이 조회되는 값을 아래와 같이 조회 가능

select
	array_to_string(array_agg(name), ',')
from
	name_table
--Tom Holland,Petter Parker,Spider-Man--

11. split_part

구분자를 기준으로 문자열을 분할한 후 지정된 위치에 해당하는 부분을 반환

select 
	split_part(to_char(now(), 'yyyy-mm-dd'), '-', 1),
	split_part(to_char(now(), 'yyyy-mm-dd'), '-', 2),
	split_part(to_char(now(), 'yyyy-mm-dd'), '-', 3)
--2023--
--03--
--31--    
반응형