postgresql行转列

问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据?
答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法
写法1
group by + sum + case when
select name,
sum(case when zbfm='年龄' then value else end) as 年龄,
sum(case when zbfm='身高' then value else end) as 身高,
sum(case when zbfm='体重' then value else end) as 体重
from test group by name
having name like '%1' and length(name)= order by 年龄 desc


写法2
用postgresql的crosstab交叉函数
crosstab(unknown, unknown) does not exist
select * from
crosstab(
'select name,zbfm,value from test where name like ''%1'' and length(name)=4',$$values('年龄'), ('身高'), ('体重')$$)
as score(name text, 年龄 int, 身高 int, 体重 int)
order by 年龄 desc


写法3
group by + string_agg + split_part(分组,行转列,字符切割)
select name,
split_part(split_part(temp,',',),':',) as 年龄,
split_part(split_part(temp,',',),':',) as 身高,
split_part(split_part(temp,',',),':',) as 体重
from(
select name, string_agg(zbfm||':'||value,',') as temp from test
group by name
having name like '%1' and length(name)=
) as t order by 年龄 desc


group by + string_agg
select name, string_agg(zbfm||':'||value,',') from test
group by name
having name like '%1' and length(name)=

其他
建表语句
CREATE TABLE test
(
id serial NOT NULL,
value integer,
name character varying,
zbfm character varying,
CONSTRAINT pkey PRIMARY KEY (id)
)
插入数据(python)
import psycopg2
from random import random
conn = psycopg2.connect(database="postgres", user="postgres", password="password", host="ip", port="port")
cur = conn.cursor() def insertData():
names = ['路人甲', '王尼玛', '唐马儒']
zbfms = ['年龄', '身高', '体重'] for i in range(100):
sqlstr = 'insert into test(name, zbfm, value) values'
for j in range(100):
for name in names:
for zbfm in zbfms:
sqlstr += "('%s','%s',%d),"%(name+str(i*100+j),zbfm,int(100*random()))
cur.execute(sqlstr[:-1])
conn.commit()
print(i) if __name__ == '__main__':
insertData()
selectData()
参考
postgresql行转列的更多相关文章
- postgresql 行转列,列转行后加入到一个整体数据
这里行转列的基本思想就是使用max,因为其他列下面都是NULL,所以可以Max最后就只能得到有值的这行 普通的查询: SELECT icd , case when (ROW_NUMBER() OVER ...
- postgresql 行转列,拼接字符串
create table k_user ( op_id ) not null, op_name ) not null, password ) not null, real_name ) not nul ...
- postgresql行转列并拼接字符串
有这样一张表: ; id | kw ----+-------- 1 | big 1 | hello 2 | oracle 2 | small 2 | apple 3 | shit( ...
- postgresql高级应用之行转列&汇总求和
postgresql高级应用之行转列&汇总求和 轉載請注名出處 https://www.cnblogs.com/funnyzpc/p/14732165.html 前言 节前公司业务方需要做一個 ...
- SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...
- T-SQL 实现行转列
问题: 我正在寻找一种有效的方式将行转换为SQL服务器中的列 例如,通过下表如何构建出预期结果表. Id Value ColumnName 1 John FirstName 2 2 ...
- Oracle行转列、列转行的Sql语句总结
多行转字符串 这个比较简单,用||或concat函数可以实现 SQL Code 12 select concat(id,username) str from app_userselect i ...
- sql的行转列(PIVOT)与列转行(UNPIVOT)
在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...
- 做图表统计你需要掌握SQL Server 行转列和列转行
说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...
随机推荐
- 转帖 Oracle 主键的处理方法 http://www.cnblogs.com/Richardzhu/p/3470929.html
Oracle之主键的创建.添加.删除操作 一.创建表的同时创建主键约束 1.1.无命名 SQL> create table jack (id int primary key not null ...
- Oracle数据库SQLPLUS 连接显示 ??? 的解决
linux下 安装了中文版本的,造成sqlplus 连接时出现了乱码 如图 一开始以为是LANG 变量的问题 后来发现是NLS_LANG的问题 解决方法: export NLS_LANG=" ...
- Qt__绘制系统
Qt绘制系统简介 Qt 的绘图系统允许使用相同的 API 在屏幕和其它打印设备上进行绘制.整个绘图系统基于QPainter,QPainterDevice和QPaintEngine三个类. QPaint ...
- Angular $broadcast和$emit和$ond实现父子通信
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- 重温Delphi之:面向对象
任何一门语言,只要具备了"封装,继承,多态"这三项基本能力,不管其实现方式是直接或曲折.复杂或简洁,就可以称之为“面向对象”的语言. Delphi当年的迅速走红,是以其RAD快速开 ...
- Ajax 響應
獲取服務器的響應內容,可以使用responseText或者responseXML屬性 responseText:獲取字符串形式的相應內容,除了XML的響應內容以外可用 responseXML:獲取XM ...
- Lodop打印二维码内容长度不同如何大小相同
利用Loodop打印控件打印二维码的时候,往往传入的数值是变量,有的只有一个数字,有的却一大堆数字和字母,根据内容长度不同,二维码大小也不同,这样如果批量打印二维码标签,传入的数据是不同的,会造成有的 ...
- C# region指令和控制台清零
region指令 有的时候,为了完成一个需求,可能会写几十行.几百行.甚至几千行代码. 当代码数量非常多的时候,尽管你可以使用很详细的注释来帮助阅读,但也不太容易分清楚哪些代码在干什么事情. 因此,C ...
- BZOJ3589 动态树(树链剖分+容斥原理)
显然容斥后转化为求树链的交.这个题非常良心的保证了查询的路径都是到祖先的,求交就很休闲了. #include<iostream> #include<cstdio> #inclu ...
- Json数组对象取值
1.数据格式 {"data":[{"username":"xxx","avatar":"xxx",& ...