gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 16:24:08 25 4
gpt4 key购买 nike

如果我有一个看起来像这样的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的命中数。我不确定这是否称为数据透视表,但有人建议这样做吗?

最佳答案

这基本上是数据透视表。

可以在此处找到有关如何实现此目标的不错的教程:http://www.artfulsoftware.com/infotree/qrytip.php?id=78

我建议阅读这篇文章,并根据您的需求调整此解决方案。

更新资料

在上面的链接当前不可用之后,我不得不为在此搜索mysql枢轴答案的所有人提供一些其他信息。它确实具有大量信息,我不会在这里放置所有内容(甚至因为我不想复制他们的大量知识而在这里提供了更多信息),但是我将提供一些有关如何处理数据透视的建议通常以来自peku的示例(首先问这个问题)为例来列出sql方式。

也许链接很快回来,我会密切注意的。

电子表格方式...

为此,许多人只是使用MSExcel,OpenOffice或其他电子表格工具之类的工具。这是一个有效的解决方案,只需将数据复制到那里,然后使用GUI提供的工具即可解决此问题。

但这不是问题,甚至可能导致一些不利因素,例如如何将数据输入电子表格,难以解决的缩放等。

SQL方式...

鉴于他的桌子看起来像这样:

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


行( EMAILPRINT x pages)类似于条件。主要分组是按 company_name

为了设置条件,这大声喊叫使用 CASE语句。为了对某物进行分组,请使用... 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语句中定义的条件越多。

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

有关此主题的一些其他链接:


http://anothermysqldba.blogspot.de/2013/06/pivot-tables-example-in-mysql.html
http://www.codeproject.com/Articles/363339/Cross-Tabulation-Pivot-Tables-with-MySQL
http://datacharmer.org/downloads/pivot_tables_mysql_5.pdf
https://codingsight.com/pivot-tables-in-mysql/

关于mysql - 如何在MySQL中返回数据透视表输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54356858/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com