MySQL/MariaDB怎么实现数据透视表

  介绍

这篇文章将为大家详细讲解有关MySQL/MariaDB怎么实现数据透视表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

使用例表达式和分组聚合

数据透视表的本质就是按照行和列的不同组合进行数据分组,然后对结果进行汇总,因此,它和数据库中的分组(集团)加聚合函数(数、总和、AVG等)的功能非常类似。

我们首先使用以下GROUP BY子句对销售数据进行分类汇总:

select 合并(产品,,& # 39;【全部产品】& # 39;),“产品“,   ,,,合并(频道,& # 39;【所有渠道】& # 39;),“渠道“,   ,,,any_value(合并(提取(得到saledate获year_month ), & # 39;【所有月份】& # 39;)),“月份“,   ,,,金额(金额),“销量“   得到sales_data   group  by 产品,渠道,提取(year_month 得到saledate), with 汇总;

以上语句按照产品,渠道以及月份进行汇总;与汇总选项用于生成不同层次的小计,合计以及总计;合并函数用于将汇总行中零值的显示为相应的信息;any_value函数用于返回分组内的任意数据,如果去掉会返回语法错误(MySQL的一个bug)。该查询返回的结果如下:

产品,,,,,|渠道,,,,,|月份,,,,,,|销量,,,|
- - - - - - - - - - - - | - - - - - - - - - - - - | | - - - - - - - - - - - - - - - - - - - - - |
桔子,,,,,|京东,,,,,| 201901,,,|,41289 |
桔子,,,,,|京东,,,,,| 201902,,,|,43913 |
桔子,,,,,|京东,,,,,| 201903,,,|,49803 |
桔子,,,,,|京东,,,,,| 201904,,,|,49256 |
桔子,,,,,|京东,,,,,| 201905,,,|,64889 |
桔子,,,,,|京东,,,,,| 201906,,,|,62649 |
桔子,,,,,|京东,,,,,|【所有月311799份】| |
桔子,,,,,|店面,,,,,| 201901,,,|,41306 |
桔子,,,,,|店面,,,,,| 201902,,,|,37906 |
桔子,,,,,|店面,,,,,| 201903,,,|,48866 |
桔子,,,,,|店面,,,,,| 201904,,,|,48673 |
桔子,,,,,|店面,,,,,| 201905,,,|,58998 |
桔子,,,,,|店面,,,,,| 201906,,,|,58931 |
桔子,,,,,|店面,,,,,|【所有月294680份】| |
桔子,,,,,|淘宝,,,,,| 201901,,,|,43488 |
桔子,,,,,|淘宝,,,,,| 201902,,,|,37598 |
桔子,,,,,|淘宝,,,,,| 201903,,,|,48621 |
桔子,,,,,|淘宝,,,,,| 201904,,,|,49919 |
桔子,,,,,|淘宝,,,,,| 201905,,,|,58530 |
桔子,,,,,|淘宝,,,,,| 201906,,,|,64626 |
桔子,,,,,|淘宝,,,,,|【所有月302782份】| |
桔子,,,,,|【所有渠道】|【所有月909261份】| |
,
香蕉,,,,,|【所有渠道】|【所有月925369份】| |
【全部产品】|【所有渠道】|【所有月份】| 2771682 |

实际上,我们已经得到了销量的汇总结果,只不过需要将数据按照不同月份显示为不同的列,也就是需要将行转换为列,这个功能可以使用例表达式实现:

select 合并(产品,,& # 39;【全部产品】& # 39;),“产品,,,合并(频道,& # 39;【所有渠道】& # 39;),“渠道,,,   ,,,总和(case 提取(year_month 得到saledate), when  201901, then  amount  else  0,结束),“一月“,   ,,,总和(case 提取(year_month 得到saledate), when  201902, then  amount  else  0,结束),“二月“,   ,,,总和(case 提取(year_month 得到saledate), when  201903, then  amount  else  0,结束),“三月“,   ,,,总和(case 提取(year_month 得到saledate), when  201904, then  amount  else  0,结束),“四月“,   ,,,总和(case 提取(year_month 得到saledate), when  201905, then  amount  else  0,结束),“五月“,   ,,,总和(case 提取(year_month 得到saledate), when  201906, then  amount  else  0,结束),“六月“,   ,,,金额(金额),“总计“;   得到sales_data   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

MySQL/MariaDB怎么实现数据透视表