gpt4 book ai didi

postgreSql分组统计数据的实现代码

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 30 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章postgreSql分组统计数据的实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1. 背景 。

比如气象台的气温监控,每半小时上报一条数据,有很多个地方的气温监控,这样数据表里就会有很多地方的不同时间的气温数据 。

2. 需求:

每次查询只查最新的气温数据按照不同的温度区间来分组查出,比如:高温有多少地方,正常有多少地方,低温有多少地方 。

3. 构建数据 。

3.1 创建表结构:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 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 造数据 。

?
1
2
3
4
5
6
7
8
9
10
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的一个函数:ROW_NUMBER() OVER( [ PRITITION BY col1] ORDER BY col2[ DESC ] ) 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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

效果如下,查出的都是最新的数据:

postgreSql分组统计数据的实现代码

4.2 需求2的SQL语句 。

利用了一个case when then else end 用法来统计数量 。

?
1
2
3
4
5
6
7
8
9
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

效果如下,因为没有过滤每个地方的最新数据,查出的是所有数据:

postgreSql分组统计数据的实现代码

用需求1的结果来查询统计:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

效果如下:

postgreSql分组统计数据的实现代码

假如再嵌套一个sum统计,就能查出低温天气,正常天气,高温天气分别合计数量是多少了.

over,enjoy! 。

到此这篇关于postgreSql分组统计数据的文章就介绍到这了,更多相关postgreSql分组数据内容请搜索我以前的文章或继续浏览下面的相关文章希望大家以后多多支持我! 。

原文链接:https://blog.csdn.net/Scoful/article/details/107304259 。

最后此篇关于postgreSql分组统计数据的实现代码的文章就讲到这里了,如果你想了解更多关于postgreSql分组统计数据的实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com