编写sql统计一段时间内,每天、每月、每年的统计数据(PostgreSQL)

这篇具有很好参考价值的文章主要介绍了编写sql统计一段时间内,每天、每月、每年的统计数据(PostgreSQL)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编写sql统计一段时间内,每天、每月、每年的统计数据(PostgreSQL)

前言

在做数据统计页面时,总会遇到统计某段时间内,每天、每月、每年的数据视图(柱状图、折线图等)。这些统计数据一眼看过去也简单呀,不就是按照时间周期(天、月、年)对统计数据进行分个组就完了嘛?但是会有一个问题,简单的写个sql对周期分组,获取到的统计数据是缺失的,即没有数据的那天,整条记录也都没有了。如下图
需求:以当前月份(2023年2月)为起点,往后倒推一年,查询之前一年里每个月的统计数据。
可见图中的数据其实是缺少的,这条sql只查询到了有数据的月份(23年的1月、2月,22年的12月)
sql分类按月份汇总,sql,postgresql,数据库
如果我想要没有数据的那个月或者那一天、那一年也显示统计记录出来,即统计数据字段设为0.该怎么实现呢?
sql分类按月份汇总,sql,postgresql,数据库文章来源地址https://www.toymoban.com/news/detail-530624.html

解决思路

  1. 先单表查询目标表单,按时间周期分组,统计出每个月对应的统计数据。设为表e,这时结果数据是有缺失的
  2. 再单表查询出倒推一年内,每个月份的字段。设为表 w
  3. 最后将两张表根据 月份字段进行关联查询,其中关联查询的侧重表应是w
编写sql
SELECT COALESCE(e.counts,0),w.wmonth
from (
			SELECT COUNT(*) counts,to_char(create_time, 'yyyy-MM') months
			FROM employee
			GROUP BY months
		) e 
		RIGHT JOIN
		(
			SELECT to_char(t, 'yyyy-MM') as wmonth
			from generate_series(now() - INTERVAL '1 year' ,now(), '1 MONTH') as t
		) w on e.months = w.wmonth
GROUP BY w.wmonth,e.counts
ORDER BY w.wmonth desc
函数解析
  • COALESCE(e.counts,0):在查询表单的结果里,如果e.counts为null,则设置为0
  • to_char(create_time, ‘yyyy-MM’): 这个函数可以将时间对象转化为字符串形式,有点像java内的SimpleDateFormat.format()函数
  • now():获取当前的时间戳
  • generate_series(startTime,endTime ‘1 MONTH’):这个函数就是实现数据完整检查的关键之一。作用是专门获取一个时间区段内,每一天、每个月、每一年的时间’对象‘。该函数一共有三个参数
    (起始时间,末尾时间,时间跨度)
	-SELECT to_char(t, 'yyyy-MM') as wmonth
			from generate_series(now() - INTERVAL '1 year' ,now(), '1 MONTH') as t
  • sql分类按月份汇总,sql,postgresql,数据库

到了这里,关于编写sql统计一段时间内,每天、每月、每年的统计数据(PostgreSQL)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现?

    2023-06-13:统计高并发网站每个网页每天的 UV 数据,结合Redis你会如何实现? 答案2023-06-13: 如果统计 PV (页面浏览量)那非常好办,可以考虑为每个网页创建一个独立的 Redis 计数器,并将日期添加为键(key)的后缀。当网页收到请求时,对应的计数器将被递增。对于每天的

    2024年02月08日
    浏览(90)
  • MySQL时间分组:按小时统计数据(mysql按小时分组)

    MySQL时间分组是一类涉及MySQL数据库的SQL语句,能够以小时对数据进行分组统计。 比如,如果你想根据一定的时间间隔,把MySQL数据库中的记录分成几组,那么MySQL时间分组技术就派上用场了。 MySQL时间分组主要使用MySQL语句YEAR(), WEEK(), HOUR()和GROUP BY来实现,按小时统计数据实

    2024年02月12日
    浏览(54)
  • mysql统计近7天数据量,,按时间戳分组

    可以使用以下 SQL 语句来统计近7天的数据量,并按时间戳分组。如果某一天没有数据,则将其填充为0。 解释说明: DATE_FORMAT(FROM_UNIXTIME( timestamp ), \\\'%Y-%m-%d\\\') AS date 将时间戳转换为日期格式,例如 2021-03-01。 COUNT(*) AS count 统计每天数据的数量。 WHERE timestamp = UNIX_TIMESTAMP(DATE_SUB

    2024年02月13日
    浏览(58)
  • 【实用】Mysql 按照时间(年月周日)维度统计,不存在时间数据 自动补充 0 数值

    ps: 网上看了一大堆文章, 介绍的东西真的是很够呛, 就没一个能真正用起来的, 各个都是自动补,然后很多都是不好用的。 我自己整理一篇,这是真能用。 本篇内容 : ① 按照 日 、周、月 、年  的维度 去对数据 做分组统计  ② 不存在的数据自动补充 0  (实用) 不

    2024年02月03日
    浏览(50)
  • 解决Oracle SQL语句性能问题——收集和维护统计数据

    所谓统计数据,前述文中也提到过,它们是数据库优化器赖以产生SQL语句最优执行计划的依据。以这些统计数据为基础,优化器通过内置的模型、算法等,计算出全部或候选执行计划的成本(Cost),通过比较每个执行计划的成本,选出成本最低的执行计划,也就得到了SQL语句

    2024年02月10日
    浏览(83)
  • 数据处理与统计分析——MySQL与SQL

    数据库:DB(DataBase) 概念 :数据仓库,软件,安装在操作系统之上 作用 :存储数据,管理数据 关系型数据库:SQL(Structured Query Language) MySQL、Oracle、Sql Server、DB2、SQLlite 通过表和表之间,行和列之间的关系进行数据的存储 通过外键关联来建立表与表之间的关系 非关系型

    2024年02月12日
    浏览(42)
  • 使用JOIN查询数据重复,怎么办?使用count统计怎么写SQL?

    比如现在有两个表tbl_a和tbl_b,如下: tbl_a id name 1 Bruce 2 Mike 3 Angela tbl_b id a_id :-: :-: 1 1 2 1 3 2 4 3 5 3 6 3 这时候我们如果联查的话,就会出现重复数据: 这样查出来的数据就会像下面这样: id name 1 Bruce 1 Bruce 2 Mike 3 Angela 3 Angela 3 Angela 去重的方法有三种: 一、distinct 二、group

    2024年02月16日
    浏览(53)
  • 如何通过ELK统计一段时间内接口被调用次数及平均响应时间

    ELK,全名是: Elasticsearch,有了它,我们可以很方便地进行日志查询。 那么,假如想要统计某个服务的接口在某段时间内的被调用次数平均响应时间,类似于下面的效果: 那应该怎么做呢? 步骤如下, 1、打开ELK地址,找到Dev Tools 2、点击Dev Tools,输入执行内容 说明: 注意

    2024年02月12日
    浏览(57)
  • mysql数据库使用sql对特殊分隔符分隔的字段进行统计

    需求 在一个数据库表中有一个字段中的数据是通过特殊符号进行分隔的,现需要统计分隔符分开的各数据的条数。 数据准备  现需统计各个绝技的人数☺ 思路 使用sql根据逗号将一行数据拆分成多行数据 ,然后使用group by对拆分的数据进行统计。 三种方式,相同的原理 使用

    2023年04月17日
    浏览(102)
  • DB SQL 转 ES DSL(支持多种数据库常用查询、统计、平均值、最大值、最小值、求和语法)...

    1. 简介   日常开发中需要查询 Elasticsearch 中的数据时,一般会采用 RestHighLevelClient 高级客户端封装的API。项目中一般采用一种或多种关系型数据库(如: Mysql 、 PostgreSQL 、 Oracle 等) + NoSQL(如: Elasticsearch )存储方案;不同关系数据库可以采用 Mybatis-Plus 方案屏蔽数据库的方言

    2024年01月17日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包