-
PostgreSQL 스터디 #4Project/PostgreSQL 2022. 11. 22. 23:02
Group By
그룹을 만들어서 함수도 쓸 수 있게 할 수 있는 방법.
예제에서는 항목의 개수를 리턴 받을 수 있는 COUNT(*) 함수를 사용 한다.
SELECT country_of_birth, COUNT(*) FROM person GROUP BY country_of_birth ORDER BY country_of_birth;아래 처럼 데이터 중 해당하는 국가의 개수를 표현한다.

Group By Having
그룹에서 논리 연산자로 필터를 걸 수 있는 기능.
SELECT country_of_birth, COUNT(*) FROM person GROUP BY country_of_birth HAVING COUNT(*) > 30 ORDER BY country_of_birth;아래와 같이 데이터의 개수가 30개 초과인 항목만 표시한다.

Min, Max, Avg
아래의 함수들로 최소, 최대, 평균 값을 구할 수 있다.
- 최소: MIN(price)
- 최대: MAX(price)
- 평균: AVG(price::numeric)
Group by를 사용하면 해당 그룹 값에 대해 목록을 볼 수 있다.
SELECT make, MIN(price) FROM car GROUP BY make;
SELECT make, MAX(price) FROM car GROUP BY make;
SELECT make, AVG(price::numeric) FROM car GROUP BY make;
Issue #1
Money type 입력
아래 테이블을 생성해서 예제를 진행하는 도중, "Money" type을 지정하게 되었다.

생성 된 sql파일을 열어서 항목을 수정하는 도중 price에 NUMERIC type으로 설정하라는 설명이 있었다.

하지만 에러가 발생했고, 그 이유는 price 데이터들 앞에 붙은 "$" 때문이였다.
Type에 대한 docs를 찾아보다가 money관련 type이 있다는 것을 확인했다.
아래와 같이 price의 type을 "MONEY"로 수정했다.

정상적으로 table이 생성 되었다.

Issue #2
Money type AVG 사용
Money type에 AVG()를 그대로 사용하면 아래와 같이 에러가 나온다.

이는 아래와 같이 numeric으로 형변환을 통해서 값을 확인 할 수 있다.

'Project > PostgreSQL' 카테고리의 다른 글
PostgreSQL 스터디 #3 (0) 2022.11.19 PostgreSQL 스터디 #2 (0) 2022.11.19 PostgreSQL 스터디 #1 (0) 2022.11.18