开发者社区> 问答> 正文

如何在MySQL中返回数据透视表输出?

如果我有一个看起来像这样的MySQL表:

company_name操作页数

公司A打印3 公司A打印2 公司A打印3 公司B电子邮件
公司B打印2 公司B打印2 公司B打印1 公司A打印3 是否可以运行MySQL查询以获取如下输出:

company_name EMAIL打印1页打印2页打印3页


公司A 0 0 1 3 公司B 1 1 2 0 这个想法pagecount可能会有所不同,因此输出列的数量应反映出这一点,每列action/ 每pagecount对对应一列,然后每列的匹配数company_name。我不确定这是否称为数据透视表,但有人建议这样做吗?

展开
收起
保持可爱mmm 2020-05-08 09:50:30 801 0
1 条回答
写回答
取消 提交回答
  • 鉴于他的桌子看起来像这样:

    CREATE TABLE test_pivot ( pid bigint(20) NOT NULL AUTO_INCREMENT, company_name varchar(32) DEFAULT NULL, action varchar(16) DEFAULT NULL, pagecount bigint(20) DEFAULT NULL, PRIMARY KEY (pid) ) ENGINE=MyISAM; 现在查看他/她想要的表:

    company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages

    CompanyA 0 0 1 3 CompanyB 1 1 2 0 行(EMAIL,PRINT x pages)类似的条件。主要分组为company_name。

    为了设置条件,这CASE很想使用-statement。为了GROUP BY的东西,好,使用... GROUP BY。

    提供此枢纽的基本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; 这应该非常快速地提供期望的结果。这种方法的主要缺点是,数据透视表中需要的行越多,则需要在SQL语句中定义的条件越多。

    这也可以解决,因此人们倾向于使用准备好的语句,例程,计数器等。 来源:stack overflow

    2020-05-08 09:51:04
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像