postgresql行专列
发布时间:2020-12-13 16:11:24 所属栏目:百科 来源:网络整理
导读:问:怎么 分页 按条件 按顺序 姓名 不重复 查出数据? 答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法 ? 写法1? group by + sum + case when select name,sum( case when zbfm= ‘ 年龄 ‘ then value else 0 end) as 年龄,
问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据? 答:其实就是行转列,那么,postgresql怎么进行转列呢,百度了下,大概有三种写法 ? 写法1?group by + sum + case whenselect name,sum(case when zbfm=‘年龄‘ then value else 0 end) as 年龄,sum(case when zbfm=‘身高‘ then value else 0 end) as 身高,sum(case when zbfm=‘体重‘ then value else 0 end) as 体重 from test group by name having name like ‘%1‘ and length(name)=4 order by 年龄 desc ? 写法2用postgresql的crosstab交叉函数crosstab(unknown,unknown) does not exist select * from crosstab( ? 写法3group by +?string_agg +?split_part(分组,行转列,字符切割)select name,split_part(split_part(temp,‘,‘,1),‘:‘,2) as 年龄,2),2) as 身高,3),2) as 体重 from( select name,string_agg(zbfm||‘:‘||value,‘,‘) as temp from test group by name having name like ‘%1‘ and length(name)=4 ) as t order by 年龄 desc group by +?string_aggselect name,‘) from test group by name having name like ‘%1‘ and length(name)=4 ?其他建表语句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,value) values‘ for j in range(100): for name in names: for zbfm in zbfms: sqlstr += "(‘%s‘,‘%s‘,%d),"%(name+str(i*100+j),int(100*random())) cur.execute(sqlstr[:-1]) conn.commit() print(i) if __name__ == ‘__main__‘: insertData() selectData() ? ? 参考PostgreSQL 实现交叉表(行列转换)的五种方法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |