pg库实现sql行转列

简介: 这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。

这个主题还是比较常见的,行转列主要适用于对数据作聚合统计,如统计某类目的商品在某个时间区间的销售情况。列转行问题同样也很常见。

group by + sum + case when实现行转列:

SELECT 
A.ORG_ID,
A.tv_type_count,
A.tv_file_count,
A.tv_date,
CASE
    train_id 
    WHEN '1' THEN
    'ZHI' 
    WHEN '2' THEN
    'XING' 
    WHEN '3' THEN
    'SHI' 
    WHEN '4' THEN
    'KETANG' ELSE NULL 
  END "train_type" 
FROM
  T_SYS_LOG A 
WHERE
  org_id = 'xxx'

查询出来的结果是这样:

20200805184128941.png

这时我就在想要满足前端的展示,一定要将train_type进行一个分解,实现ZHIFA这种类型的数据按照日期进行一个单条数据展示,我就将这条sql抽取了出来:

SELECT 
A.ORG_ID,
A.tv_date,
A.tv_type_count,
A.tv_file_count
FROM
  T_SYS_LOG A 
WHERE
  org_id = 'xxx'

20200805184635337.png

然后就是sql的行转列了:

SELECT 
A.ORG_ID,
A.tv_date,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_type_count ELSE 0 END) AS fa_type_count,
SUM ( CASE A.train_id WHEN '1' THEN A.tv_file_count ELSE 0 END) AS zhi_file_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_type_count ELSE 0 END) AS zheng_type_count,
SUM ( CASE A.train_id WHEN '2' THEN A.tv_file_count ELSE 0 END) AS xing_file_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_type_count ELSE 0 END) AS shi_type_count,
SUM ( CASE A.train_id WHEN '3' THEN A.tv_file_count ELSE 0 END) AS xis_file_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_type_count ELSE 0 END) AS ke_type_count,
SUM ( CASE A.train_id WHEN '4' THEN A.tv_file_count ELSE 0 END) AS tang_file_count 
FROM
  T_SYS_LOG A 
WHERE
  A.org_id = 'xxx'
  GROUP BY A.tv_date,A.ORG_ID
  ORDER BY A.tv_date Desc

在这里根据不同的train_id类型来进行取值,因为每个类型都具有两个关键字段信息,所以在进行一个AS重命名,为了防止在前端出现undefine,如果查询的对应值为空的话,我们ELSE为0,同时根据时间进行分组。

20200805185429280.png

相关文章
|
6月前
|
SQL
行转列【死磕sql】
行转列【死磕sql】
35 3
|
1月前
|
SQL 安全 PHP
PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全
本文深入探讨了PHP开发中防止SQL注入的方法,包括使用参数化查询、对用户输入进行过滤和验证、使用安全的框架和库等,旨在帮助开发者有效应对SQL注入这一常见安全威胁,保障应用安全。
54 4
|
6月前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
6月前
|
SQL 关系型数据库 MySQL
mysql sql语句删除一个库下的所有表
mysql sql语句删除一个库下的所有表
44 1
|
2月前
|
SQL 关系型数据库 Shell
SQL整库导出语录及其实用技巧与方法
在数据库管理和备份恢复过程中,整库导出是一项至关重要的任务
|
2月前
|
SQL Oracle 关系型数据库
SQL整库导出语录:全面解析与高效执行策略
在数据库管理和维护过程中,整库导出是一项常见的需求,无论是为了备份、迁移还是数据分析,掌握如何高效、准确地导出整个数据库至关重要
|
2月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
342 1
|
2月前
|
SQL 存储 数据库
使用SQL_语句创建,使用,删除第一个数据库
使用SQL_语句创建,使用,删除第一个数据库
11 0
|
3月前
|
SQL JSON 分布式计算
ODPS SQL ——列转行、行转列这回让我玩明白了!
本文详细介绍了在MaxCompute中如何使用TRANS_ARRAY和LATERAL VIEW EXPLODE函数来实现列转行的功能。
|
5月前
|
SQL 大数据 HIVE
每天一道大厂SQL题【Day33】行转列,列转行
每天一道大厂SQL题【Day33】行转列,列转行
52 0
每天一道大厂SQL题【Day33】行转列,列转行