按月、日统计查询数据SQL、以及case when的使用 -- postgresql、MySQL

2023-10-27

目录

获取每月最新一条数据及case when的使用,以及其他(数据类型转换、分页)等使用 - postgresql

postgresql手册中记录了所有的操作命令级函数,具体可点击下面链接地址查看。
postgresql 手册地址:地址链接

根据月份分组、创建时间排序,获取排序后的第一条数据。即获取每月最新一条数据 - postgresql

PARTITION BY 分组字段
ORDER BY 排序字段
WHERE s.rn = 1 获取分组排序后的第一条数据
比如数据按月分组,然后按创建时间倒序排序,再获取第一条数据,即获取每月最新的一条数据。

select s.* from (select t.*, row_number() OVER (PARTITION by t.filling_month ORDER BY t.create_time desc) as rows from test t) s  where s.rows = 1

查询显示当前月往前12个月份的数据,可以根据需要查询天或月 - postgresql

generate_series 是以步长为节点拆分时间(格式:generate_series(‘startDate’, ‘endDate’, ‘拆分步长’)),INTERVAL为日期计算,在INTERVAL前加计算符号,后跟要计算加或减的日期。

SELECT 
	concat( EXTRACT ( month from to_date(calendars.mon, 'yyyy-mm')), '月') mons, 
	social_3.alarms_num AS monthCount  
	FROM 
	( SELECT to_char( months, 'yyyy-mm' ) mon FROM generate_series ( now( ) - interval '11 mon', now( ), '1mon' ) months ) calendars 
	left join( 
	select s.* from (
	select t.*, row_number() OVER (PARTITION by t.filling_month ORDER BY t.create_time desc) rn from gemp_social_security t) s  where s.rn = 1 ) social_3 
	on calendars.mon = social_3.filling_month 
	order by calendars.mon

在这里插入图片描述

##查询当前往前12个月的年月日期
SELECT to_char( months, 'yyyy-mm' ) mon FROM generate_series ( now( ) - INTERVAL '11 mon', now( ), '1mon' ) months 
##查询当前往前30天的日期
 SELECT to_char( months, 'yyyy-mm-dd' ) mon FROM generate_series ( now( ) - INTERVAL '30 day', now( ), '1day' ) months

查询结果如下:
在这里插入图片描述

根据时间统计数据,按月统计,查询每个月份的统计数据,没有数据的月份显示为0 - postgresql

SELECT
	concat ( EXTRACT ( MONTH FROM to_date( calendars.mon, 'yyyy-mm' ) ), '月' ) mon,
	COALESCE ( d.num, 0 ) AS num 
FROM
	( SELECT to_char( months, 'yyyy-mm' ) mon FROM generate_series ( now( ) - INTERVAL '11 mon', now( ), '1mon' ) months ) calendars
	LEFT JOIN (
	SELECT COUNT
		( 1 ) num,
		SUBSTRING ( jxsj, 0, 8 ) mon 
	FROM
		"public"."qlb_monitor" 
	WHERE
		jxsj >= TO_CHAR( ( DATE_TRUNC( 'MONTH', CURRENT_DATE ) - INTERVAL '11 MONTH' ), 'YYYY-MM-DD' ) 
	GROUP BY
		SUBSTRING ( jxsj, 0, 8 ) 
	) d ON calendars.mon = d.mon 
ORDER BY
	calendars.mon

MySQL 查询按月统计数据,统计当前日期往前12个月的数据,也可统计天的数据。当月没有数据统计为0

SELECT 
  days.days,
  COUNT(a.id) AS num 
FROM
  (SELECT 
    DATE_FORMAT( @date := DATE_ADD(@date, INTERVAL + 1 MONTH), '%Y-%m' ) days 
  FROM
    (SELECT 
      @date := DATE_ADD((SELECT DATE_FORMAT( (SELECT DATE_SUB( CURDATE(), INTERVAL DAYOFYEAR(NOW()) - 1 DAY )), '%Y-%m-%d' )), INTERVAL - 1 MONTH) 
    FROM
      `user` 
    LIMIT 12) TIME) AS days 
  LEFT JOIN `test` a 
    ON a.month = days.days 
GROUP BY days.days 

查询结果如下:
在这里插入图片描述

postgresql case when使用

case when 是作为条件判断使用的函数,在when后写判断条件,多个判断条件可以用and 或 or 进行连接,每个判断when都会产生一个结果then,在then后加when判断通过后对应的返回结果,返回结果类型需是一个字符串类型的结果,否则会提示异常,else是最后的其他结果,通if条件判断的else相同,返回前面所有判断不通过后的一个返回值,最后需要加上end,表示case when的结束。

SELECT t.traffic_accident AS trafficAccident,
		(CASE
			WHEN t.traffic_accident_ratio = 0 THEN '0%' 
			WHEN t.traffic_accident_ratio < 0 THEN concat ( t.traffic_accident_ratio, '%' ) 
			ELSE concat ( '+', t.traffic_accident_ratio, '%' ) 
		END 
		) AS trafficAccidentRatio,
		concat ( t.injured_ratio, '%' ) AS injuredRatio,
		t.commonly_accident AS commonlyAccident,
		concat ( t.loss_ratio, '%' ) AS lossRatio,
		t.serious_accident AS seriousAccident 
	FROM
		gemp_social_security t 
	WHERE
		t.filling_month = '2022-12' 
	ORDER BY
	t.create_time DESC 
	LIMIT 1

字段值判空条件函数使用

MySQL
MySQL提供了ifnull(字段,‘0’) 函数,如果字段值为null,则返回第二个参数值,同时也提供了if(a > b, ‘a’, ‘b’)函数,条件判断a > b 条件返回true,则返回第二个参数值,否则返回第三个参数值。

postgresql
postgresql同样提供了类似的函数,COALESCE(字段, ‘0’)如果字段值为null,则返回第二个参数值。同样可以使用上面的case - when进行条件判断做相应的返回值处理。

postgresql 字段类型转换

#将字段转为字符类型
select cast(t.num as varchar) as num from user;
#将字段转为数字类型
select cast(t.num as numeric) as num from user;

postgresql 分页

LIMIT和OFFSET允许你只检索查询剩余部分产生的行的一部分;分页使用limit 表示返回查询结果的条数,offset 表示跳过多少条。两个关键字可以单独使用,也可以组合使用,单独使用limit表示返回查询结果的固定条数,单独使用offset表示跳过查询结果的固定条数,然后返回剩余的结果。组合使用如下:表示跳过4条,返回查询结果的4条记录。

select * from user limit 4 offset 4;

SQL查询排序 – 将指定值的数据排序在前边

select id,name from table_name order by case when(name='张三' or name='李四') then 0 else 1 end, id desc

查询生成一列作为排序自增序号

select row_number() over (order by pre desc) as rows, id, name from user ;

postgresql查询一串字符串根据指定字符分割查询显示为多行

##这里根据“,”分割
select unnest(string_to_array('张三,李四,王五',',')) as name;

postgresql创建物理视图

物理视图与普通视图的区别是物理视图可以创建索引;

--创建物理视图
CREATE MATERIALIZED VIEW "public"."table_view"
AS
select 
	id,
	name,
	user_no
from 
	user;
	
--给物理视图创建唯一性索引   id是视图索引字段
CREATE UNIQUE INDEX "index_id" ON "public"."table_view" USING btree (
  "id" COLLATE "pg_catalog"."default" "pg_catalog"."text_ops" ASC NULLS LAST
);

postgresql Use the 24-hour clock, or give an hour between 1 and 12. 问题解决

出现此问题是因为数据中的时间是24小时制,查询默认用的是12小时制,导致时间字段超出限制。
只需要将日期字段查询换成查24小时制即可。
如:

select to_timestamp(create_time, 'yyyy-mm-dd hh24:mi:ss') as creat_time from user;

postgresql - 触发器相关操作

--查看现有触发器
select * from pg_trigger;

--创建一个触发器  当表system_user表数据变动的时候自动触发更新 user_materialized_view 物化视图数据,函数在后面有写
create trigger tri_user_analasis
after insert or update or delete on system_user
for each statement 
  execute procedure user_analasis_func();

postgresql函数相关操作

--创建一个函数
CREATE OR REPLACE FUNCTION "public"."user_analasis_func"()
  RETURNS "pg_catalog"."trigger" AS $BODY$ 
declare
begin 
  refresh materialized view concurrently user_materialized_view with data; 
  return null; 
end; 
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按月、日统计查询数据SQL、以及case when的使用 -- postgresql、MySQL 的相关文章

  • GRANT EXECUTE 所需的权限

    我正在为需要能够创建和删除过程但也向其他用户授予执行权限的用户创建一个组 GRANT CREATE PROCEDURE TO xxx xxx GRANT ALTER ON SCHEMA dbo TO xxx xxx 但是 我需要向组授予什么
  • 如何解决此错误:Py4JJavaError:调用 o70.showString 时出错?

    目前我正在开发 PySpark 和 DataFrame 我创建了一个数据框 from pyspark sql import import pandas as pd spark SparkSession builder appName Dat
  • pgadmin:收到“详细信息:用户没有 CONNECT 权限。”错误

    我在 Mac Yosemite 上使用 pgAdmin III 我创建了一个角色 discount 和一个数据库 discount 在 pgadmin 工具中 如何授予用户 discount 对数据库 discount 的连接权限 以及表读
  • Oracle数据库中的自增主键

    我想在 SQL Server 的列中实现标识或自动递增值 CREATE TABLE RollingStock Id NUMBER IDENTITY 1 1 Name Varchar2 80 NOT NULL 如何才能做到这一点 正如 Orb
  • 添加日期时间和时间

    服务器 SQL Server 2012 SP1 开发者版 Code declare datetime datetime 1900 01 01 00 00 00 000 declare time time 11 11 11 select da
  • 与 Postgres 的 TCP 连接安全吗?需要 SSL 吗?

    早上好 我正在浏览 Postgresql 配置文件 最近注意到有一个ssl选项 我想知道什么时候需要这样做 假设您有一个应用程序服务器和一个数据库服务器 不在专用网络内运行 如果用户尝试登录 如果未启用 SSL 应用程序服务器在查找用户密码
  • Oracle 函数编译成功,但在执行 PLS-00221 时抛出错误:不是过程或未定义

    我有简单的oracle功能 create or replace function abs test func test in in number return number is test out number BEGIN test out
  • MySQL 多个 IN 条件对同一个表进行子查询

    我有多个带有子查询的 IN 条件 SELECT S name S email FROM something S WHERE 1 NOT IN SELECT id FROM tags WHERE somethingId S id AND 2
  • mysql变量赋值:如何强制赋值顺序?

    由于mysql是一种声明性语言 我找不到强制赋值变量顺序的方法 采取这个查询 SET v1 0 SET v2 0 SELECT v1 v2 FROM MyTable table WHERE v1 v2 is not null AND v2
  • Postgres Notify 不适用于逻辑复制

    我正在使用逻辑复制将数据从 Postgres 10 4 复制到另一个 Postgres 10 4 实例 订阅者有多个触发器将事件记录到单个表中 该表有一个触发器 该触发器执行另一个函数 返回触发器 来为下游侦听器调用 NOTIFY 审计表上
  • 使用存储过程访问数据可以提供哪些安全优势?

    我看到一些指南建议您通过存储过程对所有数据访问进行分层来保护数据库 我知道对于 SQL Server 您可以保护表甚至列免受 CRUD 操作的影响 例如 Logged in as sa USE AdventureWorks GRANT SE
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • 对 SQL Server 2005 结果进行分页

    如何在 SQL Server 2005 中对结果进行分页 我在 SQL Server 2000 中尝试过 但没有可靠的方法来做到这一点 我现在想知道SQL Server 2005是否有任何内置方法 分页的意思是 例如 如果我按用户名列出用户
  • WHERE 子句或 ON 子句中的 INNER JOIN 条件?

    我今天输错了一个查询 但它仍然有效并给出了预期的结果 我的意思是运行这个查询 SELECT e id FROM employees e JOIN users u ON u email e email WHERE u id 139840 但我
  • SQL限制数据库中的最小值和最大值

    CREATE TABLE TBL CD CDnr int identity 1 1 CDTitel nvarchar 80 NOT NULL CDduur int CDprijs smallmoney 所以我正在创建这个表 有什么方法可以将
  • SQL Server:比较两个表中的列

    我最近完成了从某些应用程序的旧版本到当前版本的迁移 在迁移数据库时遇到了一些问题 我需要一个可以帮助我比较两个表中的列的查询 我的意思不是行中的数据 我需要比较列本身来弄清楚我错过了表结构的哪些变化 看一下红门 SQL 比较 http ww
  • 对时间序列数据重新采样

    我有一个以毫秒为单位的时间序列列表 我想对时间序列进行重新采样并对组应用平均值 我如何在 Postgres 中实现它 重新采样 是指聚合一秒或一分钟内的所有时间戳 一秒或一分钟内的所有行形成一组 表结构 date x y z Use dat
  • 更新查询时 ios 中出现“数据库锁定”错误

    我正在使用下面的代码更新查询 using sqlite 但我越来越 database is locked error 我尝试搜索一些 SO 链接 建议关闭数据库 但我再次执行此操作时遇到相同的错误 我已经提到过代码中出现错误的地方 cons
  • 我的数据库有错误

    创建表时如下 create table Ticket ticket id integer not null primary key AirlineName varchar not null CustomerName varchar from
  • SQL Server XQuery 返回错误

    我正在 SQL Server 2012 中对 XML 数据类型列执行查询 数据示例如下

随机推荐

  • 工信部印发互联网+行动计划 聚焦智能制造

    工信部印发 工业和信息化部关于贯彻落实 lt 国务院关于积极推进 互联网 行动的指导意见 gt 的行动计划 2015 2018年 意见提出总体目标 到2018年 互联网与制造业融合进一步深化 制造业数字化 网络化 智能化水平显著提高 其中提
  • 使用正则去掉html标签

    在开发项目的时候 会有去掉html标签只提取文字内容的情况 在此做个记录 以免之后找不到 1 匹配 lt 开始 gt 结束的全局正则 var regex lt gt gt ig 2 body内部的p标签 body p 我是文本内容 p 3
  • PostgreSQL数据库

    0 安装 我使用的操作系统为Ubuntu 安装命令 sudo apt get update sudo apt get install postgresql postgresql client 进入postgres sudo i u post
  • 如何用C语言编写暴力破解压缩文件解压密码的程序

    由于有一个重要的Rar文件 极需解开 首先试用了ARPC 但是解压的速度极慢 每秒只有30个左右 所以断了穷举破解的念头 却仍不死心 因为我从不崇尚穷举破解的方法 除非每秒可以跑几千万次的 我或许可以一试 所以决定研究一下Winrar 3
  • 在教育领域中使用ChatGPT有哪些优点?

    人工智能在教育领域的应用正在迅速增加 OpenAI于2022年11月开发的聊天机器人ChatGPT在全球范围内广受欢迎 由于其受欢迎程度以及生成类似人类问题的回答的能力 ChatGPT正在成为许多学习者和教育工作者值得信赖的伴侣 然而 与任
  • 可变68键,GANSS新版ALT71即将上市

    优化生产供应链后的GANSS 迦斯 去年下半年至今陆续成功升级C D系产品 在更优质的生产端支持下 近日 GANSS 迦斯 发布全新设计的ALT71机械键盘 独树一帜的可变配列 71键 68键 搭载升级蓝牙5 0 低功耗高续航 首发热升华版
  • 贪心——装箱问题

    贪心 装箱问题 题目描述 有一个箱子容量为V 正整数 0 V 20000 同时有n个物品 0 n 30 每个物品有一个体积 正整数 要求n个物品中 任取若干个装入箱内 使箱子的剩余空间为最小 输入描述 1个整数 表示箱子容量 1个整数 表示
  • 三目运算符的嵌套使用

    文件名 ChooseTest java 描述 练习条件运算符 三目运算符 的嵌套 学习成绩 gt 90分的同学用A表示 60 89分 之间的用B表示 60分以下的用C表示 作者 kyx 时间 2019 01 03 备注 初稿 import
  • matlab做出自相关图,在matlab中实现图像的自相关和互相关

    图像的自相关 clear I1 imread lenna bmp bmp 输入图像1 参考图像 I1 I1 1 figure 1 显示输入图像1 colormap gray 255 image I1 axis off FI1 fft2 I1
  • AD导出3D模型的各种方法——AD转SW(贴图形式)

    所有方法的链接 1 AD转SW 贴图形式 2 AD转SW MCAD插件一键生成 也适用于Fusion360 Inventor等三维建模软件 3 AD转Keyshot 待写 4 AD转PPT 待写 目录 所有方法的链接 一 前情提要 二 使用
  • 【转】NAT技术基本原理与应用

    转自 https www cnblogs com mefj p 10578639 html 1 概述 1 1 简介 1 1 1 名词解释 公有IP地址 也叫全局地址 是指合法的IP地址 它是由NIC 网络信息中心 或者ISP 网络服务提供商
  • CISP题目练习

    CISP题目练习 知识点 风险计算原理可以用下面的范式形式化地加以说明 风险值 R A T V R L T V F Ia Va R表示安全风险计算函数 A表示资产 T表示威胁 V表示脆弱性 Ia表示安全事件所作用的资产价值 Va表示脆弱性严
  • 稳压二极管的使用

    稳压二极管又叫齐纳二极管 利用pn结反向击穿状态 其电流可在很大范围内变化而电压基本不变的现象 制成的起稳压作用的二极管 稳压管主要被作为稳压器或电压基准元件使用 上面都是抄的 实际使用稳压二极管的时候才发现有问题 稳压二极管并不是能够理想
  • 使用JDBC连接数据库(一)

    JDBC是由java编程语言编写的类及接口组成 同时它为程序开发人员提供了一组用于实现对数据库访问的JDBC API 并支持SQL语言 利用JDBC可以将JAVA代码连接到oracle DB2 SQLServer MYSQL等数据库 从而实
  • 线程池的实现原理、并发和并行

    线程池参数详解 https blog csdn net daiqinge article details 51179445 例题 比如现在设置coreSize 5 maxSize 10 blockQueueSize 10 依次提交6个比较耗
  • 矩阵的转置,逆矩阵,行列式的计算,伴随矩阵等

    行列式的操作 逆矩阵 就是两个矩阵相乘是单位矩阵 对角矩阵相乘 就是对角线元素相乘 当两个矩阵相乘不是单位矩阵 伴随矩阵 是有代数余子式拼成的 为什么伴随矩阵会出现 为什么伴随矩阵的形式是这样的 因为行列式的乘法 根据矩阵的乘法可以看到 行
  • java中静态方法中调用非静态方法的详解

    静态static方法中不能调用非静态 non static 方法 准确地说是不能直接调用non static方法 但是可以通过将一个对象的引用传入static方法中 再去调用该对象的non static方法 其实这个事实的应用很经常 以至于
  • ConcurrentHashMap原理,jdk7和jdk8版本的区别

    ConcurrentHashMap原理 jdk7和jdk8版本的区别 jdk7 数据结构 ReentrantLock Segment HashEntry 一个Segment中包含一个类似于HashMap的结构 数组 链表 元素查询 二次ha
  • Linux 系统适用范围

    Linux 内核最初只是由芬兰人林纳斯 托瓦兹 Linus Torvalds 在赫尔辛基大学上学时出于个人爱好而编写的 Linux 是一套免费使用和自由传播的类 Unix 操作系统 是一个基于 POSIX 和 UNIX 的多用户 多任务 支
  • 按月、日统计查询数据SQL、以及case when的使用 -- postgresql、MySQL

    目录 获取每月最新一条数据及case when的使用 以及其他 数据类型转换 分页 等使用 postgresql 根据月份分组 创建时间排序 获取排序后的第一条数据 即获取每月最新一条数据 postgresql 查询显示当前月往前12个月份