数据透视表mysql_MySQL数据透视表

这基本上是一个数据透视表 .

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

Update

在上面的链接目前不再可用之后,我觉得有必要为在这里搜索mysql数据库答案的所有人提供一些额外的信息 . 它真的有大量的信息,我不会把这里的所有东西放在这里(更多因为我只是不想复制他们丰富的知识),但我会就如何处理枢轴给出一些建议以sql的方式表示一般来自peku的例子,他们首先提出问题 .

也许链接很快就会回来,我会留意它 .

The spreadsheet way...

许多人只是使用MSExcel,OpenOffice或其他电子表格工具之类的工具来实现此目的 . 这是一个有效的解决方案,只需复制那里的数据并使用GUI提供的工具来解决这个问题 .

但是......这不是问题,它甚至可能导致一些缺点,例如如何将数据导入电子表格,有问题的缩放等等 .

The SQL way...

鉴于他的表看起来像这样:

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 .

提供此pivot的基本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语句中定义的条件就越多 .

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值