mysql数据透视表

如果有下图的需求:


需求

首先根据产品来统计每个月的销售金额,还有产品所对应的渠道每个月的金额。

首先创建sale表:

CREATE TABLE sale  (
    saledate date NULL DEFAULT NULL,
    product varchar(50) NULL DEFAULT NULL COMMENT '产品',
    channel varchar(50) NULL DEFAULT NULL COMMENT '渠道',
    amount decimal(14, 2) NULL DEFAULT NULL COMMENT '金额'
) ENGINE = InnoDB

插入测试数据:


测试数据

首先可以用case行转列算出每个月份的销售总额,extract函数可以从日期里提取出月份,sql如下:

SELECT product AS '产品',
    channel AS '渠道',
    sum(CASE EXTRACT(MONTH FROM saledate) WHEN 1 THEN amount ELSE 0 END) AS '1月',
    sum(CASE EXTRACT(MONTH FROM saledate) WHEN 2 THEN amount ELSE 0 END) AS '2月',
    sum(amount) AS '合计'
FROM sale GROUP BY product,channel;

查询结果如下:


查询结果

用mysql自带的rollup函数就可以实现上述的透视表功能,rollup可以在group by product,channel的基础上再进行group by product得到以产品为分组的汇总,然后再整体求一下sum得到总计。
查询语句如下:

SELECT IFNULL(product,'总计') AS '产品',
    IFNULL(channel,'--') AS '渠道',
    sum(CASE EXTRACT(MONTH FROM saledate) WHEN 1 THEN amount ELSE 0 END) AS '1月',
    sum(CASE EXTRACT(MONTH FROM saledate) WHEN 2 THEN amount ELSE 0 END) AS '2月',
    sum(amount) AS '合计'
FROM sale GROUP BY product,channel with ROLLUP;

我们一起来看一下执行结果,激动人心的一刻来了,擦亮我们的眼睛。


数据透视表
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 数据透视表的本质就是按照行和列的不同组合进行数据分组,然后对结果进行汇总;因此,它和数据库中的分组(GROUP B...
    王雅晴_强化班阅读 2,472评论 0 0
  • 转置即旋转数据表的横纵方向,常用来改变数据布局,以便用新的角度观察。有些转置算法比较简单,比如行转列、列转行、双向...
    心宇gxy阅读 3,942评论 0 1
  • @[toc] MySQL操作表中数据 MySQL 提供了功能丰富的数据库管理语句,包括向数据库中插入数据的 INS...
    夜雨流云阅读 3,555评论 0 1
  • 第1章 了解SQL 1.1 数据库基础 1.1.1 什么是数据库 数据库(database) 保存有组织的数据的容...
    _Cappuccino_阅读 14,028评论 0 1
  • 最近又重新复习了一遍SQL的基础和进阶知识,SQL可以很基础也可以很复杂,写一篇总结来梳理自己的知识脉络 SQL是...
    元宝2020阅读 3,237评论 0 0

友情链接更多精彩内容