问:怎么分页&&按条件&&按顺序&&姓名不重复查出数据?

答:其实就是行转列,那么,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行转列的更多相关文章

  1. postgresql 行转列,列转行后加入到一个整体数据

    这里行转列的基本思想就是使用max,因为其他列下面都是NULL,所以可以Max最后就只能得到有值的这行 普通的查询: SELECT icd , case when (ROW_NUMBER() OVER ...

  2. postgresql 行转列,拼接字符串

    create table k_user ( op_id ) not null, op_name ) not null, password ) not null, real_name ) not nul ...

  3. postgresql行转列并拼接字符串

    有这样一张表: ; id |   kw   ----+--------  1 | big  1 | hello  2 | oracle  2 | small  2 | apple  3 | shit( ...

  4. postgresql高级应用之行转列&汇总求和

    postgresql高级应用之行转列&汇总求和 轉載請注名出處 https://www.cnblogs.com/funnyzpc/p/14732165.html 前言 节前公司业务方需要做一個 ...

  5. SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现代码(SQL Codes) 方法一:使用拼接SQL,静态列字段: 方法二:使用拼接SQL, ...

  6. T-SQL 实现行转列

    问题: 我正在寻找一种有效的方式将行转换为SQL服务器中的列 例如,通过下表如何构建出预期结果表. Id  Value   ColumnName 1   John    FirstName 2   2 ...

  7. Oracle行转列、列转行的Sql语句总结

    多行转字符串 这个比较简单,用||或concat函数可以实现  SQL Code  12    select concat(id,username) str from app_userselect i ...

  8. sql的行转列(PIVOT)与列转行(UNPIVOT)

    在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比较快速实现行转列,列转行,而且可扩展性强 一.行转列 1.测 ...

  9. 做图表统计你需要掌握SQL Server 行转列和列转行

    说在前面 做一个数据统计和分析的项目,每天面对着各种数据,经过存储过程从源表计算汇总后需要写入中间结果表以提高数据使用效率,那么此时就需要用到行转列和列转行. 1.列转行 数据经过计算加工后会直接生成 ...

随机推荐

  1. Appium学习笔记3_Genymotion模拟器安装

    如果你已经配置好了安卓的运行环境,也配置好了自带的模拟器AVD,而且也launch了你的安卓模拟器,那么我相信你是不再愿意launch安卓模拟器第二次了,因为实在是太卡了(当然如果你电脑的配置够高,你 ...

  2. js核心对象

  3. python箱型图

    #-*- coding: utf-8 -*- import pandas as pd catering_sale = '../data/catering_sale.xls' #餐饮数据 data = ...

  4. python之多线程举例

    # 多线程举例 from threading import Thread from threading import current_thread class messager(Thread): de ...

  5. MySQL基本概念以及简单操作

    一.MySQL   MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MyS ...

  6. BZOJ3237 AHOI2013连通图(线段树分治+并查集)

    把查询看做是在一条时间轴上.那么每条边都有几段存在时间.于是线段树分治就好了. 然而在bzoj上t掉了,不知道是常数大了还是写挂了. 以及brk不知道是啥做数组名过不了编译. #include< ...

  7. 【Linux】Centos7 解压zip文件

    如果输入unzip无反应那么请安装相应软件包 yum install -y unzip 语法 unzip [参数] [文件] 参数 -c:将解压缩的结果显示到屏幕上,并对字符做适当的转换: -f:更新 ...

  8. BZOJ3456 城市规划 【生成函数】【FFT】

    题目分析: 容易想到生成函数的构造方法. 令g(n)表示n个点的无向图个数,f(n)表示n个点的无向连通图的个数.式子是显然的. 容易发现式子是卷积的形式,写出生成函数,然后多项式求逆后多项式乘法即可 ...

  9. MT【216】韦达定理

    设$n$为正整数,$a_1,a_2,\cdots,a_n;b_1,b_2,\cdots,b_n;A,B$都是正数, 满足$a_i\le b_i,a_i\le A,i=1,2,\cdots,n$ 且$\ ...

  10. MT【5】蝴蝶效应:一道递推式为二次的数列

                                      评:蝴蝶效应[蝴蝶效应(The Butterfly Effect)是指在一个动力系统中,初始条件下微小的变化能带动整个系统的长期的巨 ...