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中非常重要的数据转换技巧。通过掌握这些技巧,你可以更加灵活地处理和分析数据,提高数据处理效率。希望本文能对你有所帮助!

相关推荐

  1. Oracle转行使用实例

    2024-02-08 00:16:01       31 阅读
  2. 利用pandas进行数据转行

    2024-02-08 00:16:01       15 阅读
  3. oracle 转行

    2024-02-08 00:16:01       7 阅读
  4. sql-(置)

    2024-02-08 00:16:01       11 阅读
  5. sql-2(置)

    2024-02-08 00:16:01       13 阅读
  6. sql-3(置)

    2024-02-08 00:16:01       10 阅读
  7. Python如何代码

    2024-02-08 00:16:01       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-08 00:16:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-08 00:16:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-08 00:16:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-08 00:16:01       18 阅读

热门阅读

  1. 【5G NR】移动通讯中使用的信道编解码技术

    2024-02-08 00:16:01       34 阅读
  2. Python 机器学习 特征预处理

    2024-02-08 00:16:01       30 阅读
  3. c语言编程题目:素数判断(for循环和if判断)

    2024-02-08 00:16:01       34 阅读
  4. docker compose部署gitlab 获取初始密码

    2024-02-08 00:16:01       36 阅读
  5. YOLO v8 参数设置,详解cfg/default.yaml

    2024-02-08 00:16:01       29 阅读
  6. jsPDF+html2canvas实现html转pdf下载+打印

    2024-02-08 00:16:01       30 阅读
  7. mysql 数据库基础知识

    2024-02-08 00:16:01       35 阅读