如果我有一个看起来像这样的MySQL表:
公司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。我不确定这是否称为数据透视表,但有人建议这样做吗?
鉴于他的桌子看起来像这样:
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; 现在查看他/她想要的表:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。