postgresql에서 trunc 함수는 무엇일까요? 0 이상의 double형에서는 소수점을 버리기 위해, 미만인 경우 올림 처리를 하기 위해 쓰게 됩니다. 수학적으로 즉 0 이상에서는 floor와, 미만에서는 ceil과 동일하다고 할 수 있어요. trunc(-1.23, 1)을 보겠습니다. 소수점 1째 자리까지 나타냅니다. trunc한 결과를요. -1.23은 0보다는 작으므로 ceil을 하게 됩니다. -1.3은 -1.23보다는 작고, -1.2는 -1.23보다는 크거나 같습니다. 따라서, -1.2가 출력됩니다. 실행 결과는 위와 같습니다. trunc의 2번째 인자에 아무것도 주지 않으면 0보다 크거나 같은 경우 floor를, 작은 경우 ceiling을 하게 되는데요. 아래 예제를 보겠습니다. select ..
postgres 검색 결과
안녕하세요. 이번 시간에는 postgresql에서 쓰는 string_agg 함수에 대해 간단하게 알아보겠습니다. 그리고 정렬하는 것과 중복 제거하는 것도 같이 알아볼게요. 먼저, string_agg는 컬럼의 값들을 하나의 string으로 합쳐주는 역할을 합니다. 입력으로 들어오는 row의 속성들을 하나의 string으로 합칠 때 쓰입니다. 이게 무슨 말인가? 예제를 하나 보겠습니다. temp_data를 with 절로 정의했어요. 속성 t의 값이 'a'인 것과, t의 값이 'b'인 것과, 'Z'인 것을 union한 결과를 temp_data로 정의했어요. 이제, temp_data에 있는 내용을 출력해 봅시다. 'c', 'b', 'Z', 'b'가 나옵니다. 이제 이것을 string_agg로 합쳐 보겠습니다. ..
postgresql에서 with 절은 임시 결과를 정의할 때 유용하였습니다. 이걸 여러 개를 쓸 수 있을까요? 2023년 6월 1일부터 오늘까지 통계치를 뽑고 싶을 때 유용하게 쓰일 법한 예제를 보면서 간단하게 알아보겠습니다. 테이블 d에는 id, s, created 필드가 있습니다. s와 created는 각각 내용과 생성된 날을 의미합니다. 어떤 레코드들이 있는지 보기 위해, select * from d; 를 입력해 보았습니다. 그랬더니 요래 나오는군요. created의 맨 마지막 부분에 +0900이 되어 있는 것으로 보아, 서울 시간으로 되어 있는 것이 분명하군요. 이제 저는 날짜별로 몇 개의 레코드가 생성되었는지 집계하고 싶습니다. 어떻게 하면 될까요? 날짜별로 집계 하려면 group by 날짜를 ..
postgres에서 enum 타입을 알아봅시다. 예를 들어, 유저 등급을 저장할 때 사용할 수 있습니다. rate_type을 저장하려고 합니다. rate에는 'bronze', 'silver', 'gold' 등이 있어요. 우리는 type enum을 생성할 건데요. 브론즈, 실버, 골드를 열거한 타입으로 생성할 겁니다. 이런 류는 등급 뿐만이 아니라 파일 타입 등을 저장할 때에도 쓰일 수 있습니다. 타입을 생성하는 CREATE TYPE 명령어를 쓸 건데요. enum으로 생성할 것이니, CREATE TYPE ~ AS ENUM ~ 구문을 써서 생성해 보겠습니다. 위 구문은, 타입 rate_type을 'bronze', 'silver', 'gold'를 열거한 타입으로 선언하는 것입니다. 이제, Data types을..
특정 조건을 만족하는 레코드에 대해서 집계되게 하게 하는 것은 어렵지 않습니다. 그런데, 이런 경우가 있을 수 있습니다. 1월에 카데고리별로 몇 개나 쓰여졌고, 2월에는 몇 개나 쓰여졌고, 이러한 것들을 집계해야 할 경우가 있을 텐데요. 사실 case when 등으로 처리를 할 수 있겠습니다만 postgres에서는.. aggregate filter를 처음 알게 되어서 여기에 쓰고자 합니다. 먼저, 포스트의 데이터들입니다. 포스트에는 점수와 post 내용, id와 category가 있습니다. 이들 중 post에 bye가 포함되는 것들을 모두 얻어와 봅시다. 1번 카데고리에 1개, 3번 카데고리에 2개가 있습니다. 그리고 1번 카데고리의 총 점수는 18점, 3번 카데고리는 87점입니다. 다음에 gahui가 ..
최근댓글