首页 >数据库 >mysql教程 >如何使用 MySQL 查询生成数据透视表输出?

如何使用 MySQL 查询生成数据透视表输出?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-25 20:37:09396浏览

How to Generate a Pivot Table Output Using MySQL Queries?

在MySQL中返回透视表输出

假设您有一个MySQL表,其组织方式如下:

公司名称 操作 页数
公司A 打印 3
公司A 打印 2
公司A 打印 3
公司B 邮件 NULL
公司B 打印 2
公司B 打印 2
公司B 打印 1
公司A 打印 3

现在,目标是执行一个MySQL查询以生成类似于此的输出:

公司名称 邮件 打印1页 打印2页 打印3页
公司A 0 0 1 3
公司B 1 1 2 0

从本质上讲,此输出表示一个透视表,它根据每个公司名称的操作和页数组合对数据进行分类。

解决方案

要在MySQL中返回透视表输出,您可以使用CASE语句定义每个单元格的条件,并使用GROUP BY按公司名称对数据进行分类。

以下是提供的示例的SQL语句:

<code class="language-sql">SELECT  P.`company_name`,
    COUNT(
        CASE 
            WHEN P.`action`='EMAIL' 
            THEN 1 
            ELSE NULL 
        END
    ) AS 'EMAIL',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '1' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 1 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '2' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 2 pages',
    COUNT(
        CASE 
            WHEN P.`action`='PRINT' AND P.`pagecount` = '3' 
            THEN P.`pagecount` 
            ELSE NULL 
        END
    ) AS 'PRINT 3 pages'
FROM    test_pivot P
GROUP BY P.`company_name`;</code>

此查询将输出所需的透视表格式。

重要说明

  • 对于具有更多操作/页数组合的更大表,SQL语句将需要更多CASE条件。
  • 要适应动态条件,您可以使用预处理语句或例程。

以上是如何使用 MySQL 查询生成数据透视表输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn