PostgreSQL - tablefunc

2023-11-17

官方文档地址

创建扩展

create extension tablefunc;

tablefunc函数

1. normal_rand - 产生一个正态分布随机值(高斯分布)的集合

normal_rand(int numvals, float8 mean, float8 stddev) returns setof float8

numvals是从该函数返回的值的数量。mean是值的正态分布的均值,而stddev是值的正态分布的标准偏差。

标准偏差举例:两组数的集合{0,5,9,14}和{5,6,8,9}其平均值都是7,但第二个集合具有较小的标准差。

SELECT * FROM normal_rand(100, 5, 3);

2. crosstab - 行转列(1)

crosstab(text sql)

--示例
--1、建表
db_test=# create table db_test.t_sales_amount (n_id int4,c_name varchar(100),n_quarter int2,n_amount numeric(20,2));
--2、插入数据
db_test=# insert into db_test.t_sales_amount(n_id, c_name, n_quarter, n_amount) values
(1,'张三',1,100),(1,'张三',2,200),(1,'张三',3,300),(1,'张三',4,400),
(2,'李四',1,500),(2,'李四',2,600),(2,'李四',3,700),(2,'李四',4,800);
db_test=# select * from db_test.t_sales_amount;
 n_id | c_name | n_quarter | n_amount
------+--------+-----------+----------
    1 | 张三   |         1 |   100.00
    1 | 张三   |         2 |   200.00
    1 | 张三   |         3 |   300.00
    1 | 张三   |         4 |   400.00
    2 | 李四   |         1 |   500.00
    2 | 李四   |         2 |   600.00
    2 | 李四   |         3 |   700.00
    2 | 李四   |         4 |   800.00
--3、想得到的结果,1~4季度变成四列
db_test=# SELECT *
FROM crosstab(
  'SELECT c_name, n_quarter, n_amount FROM db_test.t_sales_amount
   order by 1,2')
AS ct(c_name varchar, q_1 numeric, q_2 numeric, q_3 numeric, q_4 numeric);
--结果
 c_name |  q_1   |  q_2   |  q_3   |  q_4
--------+--------+--------+--------+--------
 李四   | 500.00 | 600.00 | 700.00 | 800.00
 张三   | 100.00 | 200.00 | 300.00 | 400.00

3. crosstab - 行转列(2)

crosstab(text source_sql, text category_sql)

  • 示例一
--1、建表插入数据
create table db_test.t_sales(year int, month int, qty int);
insert into db_test.t_sales values(2007, 1, 1000);
insert into db_test.t_sales values(2007, 2, 1500);
insert into db_test.t_sales values(2007, 7, 500);
insert into db_test.t_sales values(2007, 11, 1500);
insert into db_test.t_sales values(2007, 12, 2000);
insert into db_test.t_sales values(2008, 1, 1000);

--2、实现效果,12个月变成列,没有数据的月显示空
select * from crosstab(
  'select year, month, qty from db_test.t_sales order by 1',
  'select m from generate_series(1,12) m'
) as (
  year int,
  "Jan" int,
  "Feb" int,
  "Mar" int,
  "Apr" int,
  "May" int,
  "Jun" int,
  "Jul" int,
  "Aug" int,
  "Sep" int,
  "Oct" int,
  "Nov" int,
  "Dec" int
);
--结果
 year | Jan  | Feb  | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov  | Dec
------+------+------+-----+-----+-----+-----+-----+-----+-----+-----+------+------
 2007 | 1000 | 1500 |     |     |     |     | 500 |     |     |     | 1500 | 2000
 2008 | 1000 |      |     |     |     |     |     |     |     |     |      |

  • 示例二
--1、建表插入
CREATE TABLE db_test.t_cth(rowid text, rowdt timestamp, attribute text, val text);
INSERT INTO db_test.t_cth VALUES('test1','01 March 2003','temperature','42');
INSERT INTO db_test.t_cth VALUES('test1','01 March 2003','test_result','PASS');
INSERT INTO db_test.t_cth VALUES('test1','01 March 2003','volts','2.6987');
INSERT INTO db_test.t_cth VALUES('test2','02 March 2003','temperature','53');
INSERT INTO db_test.t_cth VALUES('test2','02 March 2003','test_result','FAIL');
INSERT INTO db_test.t_cth VALUES('test2','02 March 2003','test_startdate','01 March 2003');
INSERT INTO db_test.t_cth VALUES('test2','02 March 2003','volts','3.1234');

--2、实现效果
SELECT * FROM crosstab
(
  'SELECT rowid, rowdt, attribute, val FROM db_test.t_cth ORDER BY 1',
  'SELECT DISTINCT attribute FROM db_test.t_cth ORDER BY 1'
)
AS
(
       rowid text,
       rowdt timestamp,
       temperature int4,
       test_result text,
       test_startdate timestamp,
       volts float8
);
--结果
 rowid |        rowdt        | temperature | test_result |   test_startdate    | volts
-------+---------------------+-------------+-------------+---------------------+--------
 test1 | 2003-03-01 00:00:00 |          42 | PASS        |                     | 2.6987
 test2 | 2003-03-02 00:00:00 |          53 | FAIL        | 2003-03-01 00:00:00 | 3.1234

4. connectby

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL - tablefunc 的相关文章

  • Slick和bonecp:org.postgresql.util.PSQLException:FATAL:抱歉,太多客户端已经错误

    当我在本地开发应用程序时 我使用以下命令启动我的 play2 应用程序sbt run 我喜欢如何更改代码 然后重新加载浏览器以查看我的更改 在大约 10 次代码更改之后 我收到 postgresql 太多连接错误 见下文 我的数据库连接使用
  • 如何从 postgresql 函数或触发器发送一些 http 请求

    我需要通过 http 协议 GET 或 POST 请求 从函数或触发器发送数据 是否可以 您可以尝试用 PL Python 编写触发器并使用 urllib2 进行 POST
  • 返回年份数组作为年份范围

    我正在尝试查询一个包含以下内容的表character varying 年份列 并将这些年份作为逗号分隔的年份范围字符串返回 年份范围将由数组中存在的连续年份确定 不连续的年份 年份范围应以逗号分隔 数据类型的原因是character var
  • PostgreSQL:比较 json [重复]

    这个问题在这里已经有答案了 众所周知 目前 PostgreSQL 还没有方法来比较两个 json 值 比较就像json json不起作用 但是选角呢json to text before Then select x a y b json t
  • Postgres 平均值计算忽略 null

    这是我的 postgres 表 name revenue John 100 Will 100 Tom 100 Susan 100 Ben 5 rows 在这里 当我计算平均收入时 它返回 100 这显然不是这种情况 而总和 计数 即 400
  • PostgreSQL 仅当列存在时才重命名该列

    我在中找不到PostgreSQL 文档 https www postgresql org docs 12 sql altertable html如果有办法运行 ALTER TABLE tablename RENAME COLUMN IF E
  • 优化 LATERAL join 中的慢速聚合

    在我的 PostgreSQL 9 6 2 数据库中 我有一个查询 该查询根据一些股票数据构建计算字段表 它为表中的每一行计算 1 到 10 年的移动平均窗口 并将其用于周期性调整 具体来说 CAPE CAPB CAPC CAPS 和 CAP
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • 唯一约束与唯一索引?

    之间有区别吗 CREATE TABLE p product no integer name text UNIQUE price numeric and CREATE TABLE p product no integer name text
  • Npgsql 参数化查询输出与 PostGIS 不兼容

    我在 Npgsql 命令中有这个参数化查询 UPDATE raw geocoding SET the geom ST Transform ST GeomFromText POINT longitude latitude 4326 3081
  • Google App Engine Flexi 上 Django 的 Postgres 设置

    我正在尝试在应用程序引擎灵活环境中使用 postgres 设置 django 我按照这里的说明进行操作 https cloud google com appengine docs flexible python using cloud sq
  • pg_dump 没有对象注释?

    有没有办法执行 pg dump 并排除表 视图和列的 COMMENT ON 我广泛使用 COMMENT ON 命令来描述所有对象 并且经常在其中包含换行符以获得更清晰的描述 例如 COMMENT ON TABLE mytable1 IS M
  • 使用 NLog .NET Core 将日志记录到 PostgreSQL DB

    我尝试将日志记录集成到 NET Core 中的数据库 我能够设置 NLog 并将消息记录到 SQL Server 这很容易 但是当我尝试将 DB 切换到 PostgreSQL 时 似乎没有记录任何内容 以下是startup cs中的代码 p
  • Postgres JSONB:数组数组的 where 子句

    postgres 中有 v 9 5 如果有的话 create table json test id varchar NOT NULL data jsonb NOT NULL PRIMARY KEY id 其中 data 是 json 并且包
  • TimescaleDB 查询选择列值较上一行发生更改的行

    最近刚刚开始使用 TimescaleDB 和 Postgres 来处理大多数数据请求 然而 我遇到了一个问题 即我对时间序列数据的请求效率极低 它是一个可以是任意时间长度 具有特定整数值的数据系列 大多数时候 除非出现异常 否则该值将是相同
  • 如何创建没有循环关系的树形表?

    CREATE TABLE TREE node1 id UUID REFERENCES nodes object id NOT NULL node2 id UUID REFERENCES nodes object id NOT NULL CO
  • PLpgSQL 函数不返回匹配的标题

    当给定文本时 我试图返回电影名称以及演员和工作人员的数量 当我输入字符串并使用 ilike 时 我的查询返回不匹配的标题 我之前创建了一个视图 其中包含要在函数中输入的电影标题和工作人员数量 我的代码是 create or replace
  • PostgreSQL:删除数据库但数据库仍然存在[重复]

    这个问题在这里已经有答案了 我是 PostgreSQL 的新手 我尝试着理解它 我熟悉数据库和MySQL 我正在尝试删除我创建的数据库 因为 psql 似乎忽略了我尝试通过 Django 推送的更改 当我执行时 l我得到以下回复 List
  • Django 独特的不工作

    我在从查询中过滤掉重复项时遇到问题 我正在使用 Django 1 4 和 Postgres 8 4 13 我在我的模型对象上使用这个查询 它是一个 jquery 自动完成 term request GET get term field re
  • pg_restore错误:角色XXX不存在

    尝试将数据库从一个系统复制到另一个系统 涉及的版本是9 5 0 源 和9 5 2 目标 源数据库名称是foodb与主人pgdba并且目标数据库名称将被命名foodb dev与主人pgdev 所有命令都在将托管副本的目标系统上运行 The p

随机推荐

  • Centos7安装supervisor详细教程

    supervisor 要安装的软件的名称 supervisord 装好supervisor软件后 supervisord用于启动supervisor服务 supervisorctl 用于管理supervisor配置文件中program和su
  • iOSApp发布状态为可供销售,但在AppStore搜索不到

    通过客服反馈 反馈官网 操作步骤 进入官网 gt 登录 gt App设置和分发 gt AppStore搜索和曝光率 gt 电话或电子邮件 App设置和分发 AppStore搜索和曝光率 电话或电子邮件 电话时 邮件时
  • python测量线长

    模块 matplotlib PIL time math win32con threading 代码 mian py from PIL import Image import matplotlib pyplot as plt from ima
  • 如何使用git 生成patch 和打入patch

    平时我们在使用git 管理项目的时候 会遇到这样一种情况 那就是客户使用git 生成patch 给到我们 那我们就需要把客户给到patch 打入到我们的project 基于这样一个场景 我把git 如何生成patch 和如何打入patch
  • discuz如何进行邮件配置

    需求 discuz能使用本站域名的邮件后缀发送邮件 思路 使用腾讯企业邮 通过DNS的MX记录绑定本站域名 最后通过腾讯企业邮小程序获取到该账号的客户端专用密码 获取到客户端专用密码后 回到discuz后台进行设置 如下 按字格式进行填写
  • 如何存储10亿的数据

    最近突然想到这么一个问题 假如有 lt 10亿的数据 每个数据不重复 同时是无序 不连续的 如何使用最小的空间来存储来这么多数据 同时又能快速的确认哪个数据有没有 直接存储10亿个数据 一个int的类型 可以最大可以表示 214748364
  • Esper

    Esper Esper 的网址是 http esper codehaus org 我们可以访问该网站首页 有几种典型的应用最需要 Esper 我摘录如下 Business process management and automation
  • ORA-22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小

    昨天遇到一个问题 ORA 22835 缓冲区对于 CLOB 到 CHAR 转换或 BLOB 到 RAW 转换而言太小 去找问题时候 发现是sql查询语句的to char方法将clob类型转换成varchar类型出了问题 oracle中var
  • Unity中贴图的导入

    Preferences中的Compress Assets on Import是决定资源导入时是否压缩资源 对于贴图资源来说 就是决定导入时是否压缩贴图 而TextureImporter中的贴图格式决定的是贴图的压缩格式 一个是导入 重新导入
  • 青龙2.10.13 稳定版+对接傻妞教程+短信登录+傻妞WEB控制台 超级详细

    此文章引用大佬的教程 进行更详细的阐述 如有疑问请进交流群332461037 我用的系统是centos7 6 目录 一 重装系统 1 选择centos7 6系统 2 重置服务器密码 3 服务器开放端口 二 ssh工具远程连接服务器 1 下载
  • 固件库编程:关于core_cm3.c的错误

    固件库编程 关于core cm3 c的错误 然后编译发现如下错误和警告 CMSIS CM3 core cm3 c 445 error non ASM statement in naked function is not supported
  • 基础算法:高精度除法

    高精度除法 题目条件 除数一定不为0 include
  • Numpy 索引 排序

    numpy argmax 和 numpy argmin numpy argmax 和 numpy argmin 函数分别沿给定轴返回最大和最小元素的索引 实例 numpy sort numpy sort 函数返回输入数组的排序副本 函数格式
  • Spring学习(三)--声明式事务&常用注解

    1 前言 这篇文章用来整理spring中的事务管理机制 声明式事务和常用的注解 一般的事务管理分为两种 编程式事务和声明式事务 spring提供声明式事务的支持 这样在我们操作数据库时更加方便 2 声明式事务 声明式事务是在AOP的基础上实
  • Ubuntu16.04+GTX1060mq(驱动版本430.64)安装CUDA10.0

    Ubuntu16 04 GTX1060mq 驱动版本430 64 安装CUDA10 0 CUDA下载 cuda最新版本下载地址 可在该页面进入历史版本下载 https developer nvidia com cuda downloads
  • 环境+代理配置+模块化

    1 模块化知识补充 1 1 模块化的基础 1 引入目录 默认引入目录中的index js文件 vuex modules a js b js index js 引入a js 引入 b js import store from vuex 是vu
  • Flutter(一)之Flutter的的简单入门分析

    前言 Flutter诞生于2018年 谷歌出品 应该是属于最新的移动跨平台开发框架了 从React Native自身框架的一些问题导致的用户量降低后 有很多小伙伴便转战Flutter战场 Flutter作为最新的跨移动平台开发框架 自然是汲
  • 使用Python,matplotlib绘制Nomogram列线图

    使用Python matplotlib绘制Nomogram列线图 1 效果图 2 源码 参考 这篇博客将介绍如何使用Python matplotlib绘制列线图 写这篇博客源于博友的提问 期望使用matplotlib绘制列线图如下 翻官网文
  • 浏览器访问.m3u8文件

    浏览器播放m3u8文件
  • PostgreSQL - tablefunc

    文章目录 创建扩展 tablefunc函数 1 normal rand 产生一个正态分布随机值 高斯分布 的集合 2 crosstab 行转列 1 3 crosstab 行转列 2 4 connectby 官方文档地址 创建扩展 creat