postgre统计数据用到的sql函数(分组,日期,判空)

前言

最近项目中需要做统计,各种分组和取数逻辑,搞得头大,今天介绍一下,主要用到的三个函数(数据库为postgre)。
需求介绍:需要统计30天内每家区域公司的每天的第一条数据的总数。

代码

首先查询所有的

select c.code,h.time
from tb_company c left join tb_company_data h on c.code = h.code where c.level = '1' 
and to_char(h.time, 'yyyy-mm-dd') BETWEEN '2020-07-05' AND '2020-08-03' and h.risk_rank = '3' 

然后按照区域公司分组和时间排序用到
ROW_NUMBER() OVER (PARTITION BY 分组字段 ORDER BY 排序字段) 这个函数可以根据需求分组然后排序,然后多出排序列。

select c.code,h.time,ROW_NUMBER() OVER (PARTITION BY c.code ORDER BY to_char(h.time, 'yyyy-mm-dd')) NewIndex  
from tb_company c left join tb_company_data h on c.code = h.ode where c.level = '1' 
and to_char(h.time, 'yyyy-mm-dd') BETWEEN '2020-07-05' AND '2020-08-03' and h.risk_rank = '3'

在这里插入图片描述

还需要时间基准,因为一个月内的时间不一定都存在。下面这个sql可以查询出给定时间内的所有日期。

select to_char(generate_series(to_date('2020-07-05','yyyy-mm-dd')::date,to_date('2020-08-03','yyyy-mm-dd'),'1 day'),'yyyy-mm-dd') as data

在这里插入图片描述
最后在利用count时,当分组不存在时,会发现输出的结果为null,在postgre中可以利用判空函数COALESCE(字段名称, 字段为空赋值)。

总结

其实最好用的还是分组那个函数,排好序可以根据需求取前n条数据。postgre和mysql还是有很多区别的,日期函数我就搞了好久。最后大家取count()时如果有分组,当分组不存在时,count()出的结果会是null,需要手动判空取0。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值