如果我有一个类似这样的mysql表:
company_name action pagecount
-------------------------------
Company A PRINT 3
Company A PRINT 2
Company A PRINT 3
Company B EMAIL
Company B PRINT 2
Company B PRINT 2
Company B PRINT 1
Company A PRINT 3
是否可以运行mysql查询以获得如下输出:
company_name EMAIL PRINT 1 pages PRINT 2 pages PRINT 3 pages
-------------------------------------------------------------
CompanyA 0 0 1 3
CompanyB 1 1 2 0
我们的想法是 pagecount
可以有所不同,因此输出列的数量应该反映这一点,每列对应一列 action
/ pagecount
配对,然后是每次点击的次数 company_name
. 我不确定这是否称为透视表,但有人建议?
9条答案
按热度按时间yfwxisqw1#
这基本上是一个透视表。
关于如何实现这一点的一个不错的教程可以在这里找到:http://www.artfulsoftware.com/infotree/qrytip.php?id=78
我建议您阅读这篇文章,并根据您的需要调整此解决方案。
更新
在上面的链接目前不再可用后,我觉得有义务为所有在这里搜索mysql pivot答案的人提供一些额外的信息。它确实有大量的信息,我不会把所有的信息都放在这里(更重要的是,我只是不想复制他们丰富的知识),但是我会给出一些关于如何以sql方式处理数据透视表的建议,通常是以peku的例子为例,他首先提出了这个问题。
也许链接很快就会回来,我会留意的。
电子表格方式。。。
很多人只是使用msexcel、openoffice或其他电子表格工具来实现这个目的。这是一个有效的解决方案,只需将数据复制到那里,并使用gui提供的工具来解决这个问题。
但是。。。这并不是问题所在,它甚至可能导致一些缺点,比如如何将数据放入电子表格、有问题的缩放等等。
sql方式。。。
他的table看起来像这样:
现在看看他/她想要的table:
排成一排(
EMAIL
,PRINT x pages
)相似的条件。主要分组依据company_name
.为了创造条件,这就叫使用
CASE
-声明。为了用某物分组,好吧,用。。。GROUP BY
.提供此数据透视的基本sql可以如下所示:
这将很快提供所需的结果。这种方法的主要缺点是,透视表中的行越多,需要在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/
f5emj3cl2#
我的解决方案是不带任何数据透视的t-sql:
oogrdqng3#
对于mysql,您可以直接在
SUM()
函数,并将其计算为布尔值0
或者1
因此,您可以根据您的标准进行计数,而无需使用IF/CASE
声明演示
xzabzqsa4#
对于动态轴,使用
GROUP_CONCAT
与CONCAT
. groupconcat函数使用各种选项将组中的字符串连接成一个字符串。此处演示
4sup72z85#
使用布尔逻辑的标准sql版本:
sql小提琴。
怎样?
TRUE OR NULL
产量TRUE
.FALSE OR NULL
产量NULL
.NULL OR NULL
产量NULL
.以及
COUNT
仅统计非空值。瞧á.1cosmwyk6#
正确答案是:
5cg8jx4n7#
有一个名为mysql pivot table generator的工具,它可以帮助您创建基于web的pivot表,您可以稍后将其导出到excel(如果您愿意)。如果您的数据在一个表或多个表中,它就可以工作。
您只需指定列(它支持动态列)、行、表体中的值和表关系(如果有)的数据源
此工具的主页是http://mysqlpivottable.net
wsewodh28#
k3fezbri9#
一种选择是结合使用
CASE..WHEN
语句在mysql数据库聚合中是多余的,并考虑动态生成所需的查询以及为结果集获取适当的列标题,如以下代码块所示:演示