postgresql 그룹 통계 데이터 구현 코드

1.배경
예 를 들 어 기상대 의 기온 감 측 은 30 분 마다 데 이 터 를 보고 하고 여러 곳 의 기온 감 측 이 있다.그러면 데이터 표 에는 여러 곳 의 서로 다른 시간의 기온 데이터 가 있 을 것 이다.
2.필요:
매번 조회 할 때마다 최신 기온 데 이 터 를 서로 다른 온도 구간 에 따라 조 를 나 누 어 찾 아 낸다.예 를 들 어 고온 이 얼마나 있 는 지,정상 적 인 곳 이 얼마나 있 는 지,저온 이 얼마나 있 는 지 등 이다.
3.구축 데이터
3.1 테이블 구조 만 들 기:

-- DROP TABLE public.t_temperature

CREATE TABLE public.t_temperature (
	id int4 NOT NULL GENERATED ALWAYS AS IDENTITY,
	place_name varchar NOT NULL,
	value float8 NOT NULL,
	up_time timestamp NOT NULL,
	CONSTRAINT t_temperature_pk PRIMARY KEY (id)
);

-- Permissions

ALTER TABLE public.t_temperature OWNER TO postgres;
GRANT ALL ON TABLE public.t_temperature TO postgres;
3.2 데이터 만 들 기

INSERT INTO public.t_temperature (place_name,value,up_time) VALUES 
('  ',35,'2020-07-12 15:00:00.000')
,('  ',35.9,'2020-07-12 15:30:00.000')
,('  ',30,'2020-07-12 15:30:00.000')
,('  ',31,'2020-07-12 16:30:00.000')
,('  ',23,'2020-07-12 16:30:00.000')
,('  ',21,'2020-07-12 17:30:00.000')
,('  ',-1,'2020-07-12 17:30:00.000')
,('  ',-10,'2020-07-12 19:30:00.000')
;
4.수요 실현
4.1 필요 1 의 SQL 구문
postgresql 의 함 수 를 이용 하 였 습 니 다:ROWNUMBER() OVER( [ PRITITION BY col1] ORDER BY col2[ DESC ] )

select
	*
from
	(
	select
		tt.place_name,
		tt.value,
		tt.up_time,
		row_number() over ( partition by tt.place_name
	order by
		tt.up_time desc) as row_num
	from
		t_temperature tt) aaa
where
	aaa.row_num = 1
효 과 는 다음 과 같 습 니 다.찾 아 낸 것 은 모두 최신 데이터 입 니 다.
在这里插入图片描述
4.2 필요 2 의 SQL 구문
케이스 when then else end 용법 을 이용 하여 수량 을 집계 하 였 습 니 다.

select
	dd.place_name,
	sum(case when dd.value <= 0 then 1 else 0 end) as     ,
	sum(case when dd.value > 0 and dd.value < 25 then 1 else 0 end) as     ,
	sum(case when dd.value >= 25 then 1 else 0 end) as     
from
	t_temperature dd
group by
	dd.place_name
효 과 는 다음 과 같 습 니 다.각 지역 의 최신 데 이 터 를 걸 러 내지 않 았 기 때문에 모든 데 이 터 를 찾 을 수 있 습 니 다.
在这里插入图片描述
수요 1 의 결과 로 통 계 를 조회 합 니 다.

select
	dd.place_name,
	sum(case when dd.value <= 0 then 1 else 0 end) as     ,
	sum(case when dd.value > 0 and dd.value < 25 then 1 else 0 end) as     ,
	sum(case when dd.value >= 25 then 1 else 0 end) as     
from
	(
	select
		*
	from
		(
		select
			tt.place_name,
			tt.value,
			tt.up_time,
			row_number() over ( partition by tt.place_name
		order by
			tt.up_time desc) as row_num
		from
			t_temperature tt) aaa
	where
		aaa.row_num = 1) dd
group by
	dd.place_name
효 과 는 다음 과 같 습 니 다:
在这里插入图片描述
만약 sum 통 계 를 하나 더 끼 워 넣 으 면 저온 날씨,정상 적 인 날씨,고온 날 씨 는 각각 수량 이 얼마 인지 알 수 있다.
over,enjoy!
여기 서 post greSql 그룹 통계 데이터 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 post greSql 그룹 데이터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기