当前位置: 首页 > news >正文

SQL如何实现数据表行转列、列转行?

SQL行转列、列转行可以帮助我们更方便地处理数据,生成需要的报表和结果集。本文将介绍在SQL中如何实现数据表地行转列、列转行操作,以及实际应用示例。

这里通过表下面三张表进行举例

SQL创建数据库和数据表

数据表示例数据分别如下:

data_learning.product_order(商品销量表):

图片

data_learning.product(商品信息表):

图片

data_learning.product_category(商品二级分类信息表):

图片

01

行转列

1.1 使用CASE WHEN语句+聚合函数

**问题:**请查询女裙和儿童家具的销量,输出结果形式为女裙销量作为一列,儿童家具作为一列。

SQL:

SELECT                SUM(CASE WHEN c.category_name = '女裙' THEN a.sales_volume ELSE 0 END) AS 女裙销量                ,SUM(CASE WHEN c.category_name = '儿童家具' THEN a.sales_volume ELSE 0 END) AS 儿童家具销量            FROM                data_learning.product_order a            LEFT JOIN                (                SELECT                    *                FROM                    data_learning.product_category                )c                on a.category_id = c.category_id              ;

结果如下:

图片

1.2 使用if函数+聚合函数

同样是上面那个问题,用第二种方式如何实现呢?

SQL:

SELECT                SUM(IF(c.category_name = '女裙',sales_volume,0 )) AS 女裙销量                ,SUM(IF(c.category_name = '儿童家具',sales_volume,0)) AS 儿童家具销量            FROM                data_learning.product_order a            LEFT JOIN                (                SELECT                    *                FROM                    data_learning.product_category                )c                on a.category_id = c.category_id              ;

结果如下

图片

在实际工作中,使用场景可能比这个复杂。

比如“请查询每个月女裙和儿童家具地销量,输出结果形式为女裙销量作为一列,儿童家具作为一列”。这个时候,可以结合GROUP BY语句去实现。

同时,聚合函数可能也不一定是SUM,有可能是MAX,这个都要根据具体的业务定义,数据表内容等去灵活运用。

02

列转行

2.1 使用 UNION ALL或UNION语句

我们将上面行转列的数据结果插入到一张临时表data_learning.tmp_test,然后用这个把这个表的结果做列转行操作,也就是女裙和儿童家具变成行。

step1 : 上面的查询结果存入临时表。(实际工作中不用,这里仅仅是想用上面的数据另建一张表作为操作示例)

CREATE TABLE data_learning.tmp_test AS            SELECT                SUM(IF(c.category_name = '女裙',sales_volume,0 )) AS 女裙销量                ,SUM(IF(c.category_name = '儿童家具',sales_volume,0)) AS 儿童家具销量            FROM                data_learning.product_order a            LEFT JOIN                (                SELECT                    *                FROM                    data_learning.product_category                )c                on a.category_id = c.category_id            ;

**step2:**做列转行操作

SQL:SELECT                '女裙' AS 类别                ,女裙销量 AS 销量            FROM                data_learning.tmp_test                           UNION ALL                       SELECT                '儿童家具' AS 类别                ,儿童家具销量 AS 销量            FROM                data_learning.tmp_test            ;               

结果如下:

图片

行转列与列转行是SQL中非常重要的数据转换技巧。通过掌握这些技巧,你可以更加灵活地处理和分析数据,提高数据处理效率。希望本文能对你有所帮助!

http://www.lryc.cn/news/294701.html

相关文章:

  • 【React】redux状态管理、react-redux状态管理高级封装模块化
  • HAProxy 和负载均衡概念简介
  • 【go】ent操作之CRUD与联表查询
  • 服务器性能监控管理方法及工具
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于FPGA和CAN协议2.0B的总线控制器研究与设计
  • 14.1 Ajax与JSON应用(❤❤)
  • ffmpeg命令生成器
  • JavaScript基础速成
  • openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志
  • 在vs code的terminal,debug执行python main.py --train True
  • docker 简单项目
  • 计算机毕业设计 基于SpringBoot的线上教育培训办公系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 四、机器学习基础概念介绍
  • Excel设置单元格下拉框(poi)
  • api接口是什么意思,api接口该如何防护呢?
  • PMP资料怎么学?PMP备考经验分享
  • partition by list(msn_id)子句的含义
  • 【C++】I/O多路转接详解(二)
  • PySpark(三)RDD持久化、共享变量、Spark内核制度,Spark Shuffle
  • 详解MYSQL中的平均值组大小
  • 【爬虫专区】批量下载PDF (无反爬)
  • PostgreSQL解决序列(自增id)自动增长冲突
  • 1.0 Zookeeper 分布式配置服务教程
  • (Flutter 常用插件整理
  • vue2.0+使用md-edit编辑器
  • Java设计模式大全:23种常见的设计模式详解(二)
  • 【算法与数据结构】718、1143、1035、392、115、LeetCode最长重复子数组+最长公共子序列+不相交的线+判断子序列+不同的子序列
  • OCR文本纠错思路
  • 【java批量导出pdf】优化方案
  • Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器